fetch
в котором у Request
body
- это ReadableStream
, растянув таким образом запрос настолько - насколько надо. Но это всё же не совсем то же самое что просто медленный запрос.[class^="chat__root__"]
. Заметьте я использовал не полное имя класса, а только начало и модификатор ^=
указывающий сверять только начало(если класс не первый, то можно использовать *=
). Почему? Потому что "непонятные буковки" в конце - это генерируемый при сборке хэш, который поменяется при выпуске следующей версии фронта и если вы к нему привяжитесь - ваш скрипт очень скоро перестанет работать.// @run-at document-start
function addCss(css, root = window) {
const style = root.document.createElement('style');
style.innerHTML = css;
(root.document.head || root.document.documentElement).append(style);
return style;
}
const css = `
[class^="chat__root__"] {
dislpay: none !important;
}
`;
addCss(css);
// @run-at document-start
const css = `
[class^="chat__root__"] {
dislpay: none !important;
}
`;
// отлавливаем загрузку фреймов
new MutationObserver(() => {
document.querySelectorAll('iframe:not([us-processed]').forEach((iframe) => {
if (isAccessibleFrame(iframe)) {
// добавляем наш css
addCss(css, iframe.contentWindow);
// на случай если содержимое фрейма перепишут позднее
iframe.addEventListener('load', () => addCss(css, iframe.contentWindow));
}
// помечаем что обработали этот фрем, чтоб не повторять
iframe.setAttribute('us-processed', true);
});
}).observe(document, {childList: true, subtree: true});
// проверяем что содержимое фрейма доступно
function isAccessibleFrame(iframe) {
try {
iframe.contentWindow.test
return true
} catch (e) {
return false
}
}
Swiper
не ждёт свойства spaceBetween
. Вы уверены, что оно хоть что-то делает?Swiper
и на самом деле он такое свойство ждёт, то вам следует репортить этот баг автору компонента (предварительно обновившись до последней версии).declare module 'путь до типов компонента Swiper' {
interface SwiperProps {
spaceBetween: number;
}
}
function monkeyParse(responseText) {
responseText = responseText
.replace(/("field-name"\s*:\s*)(\d(?:\.\d+)?)/g, '$1"$2"');
return JSON.parse(responseText);
}
monkeyParse('{ "field-name": 1.1000 }'); // { "field-name": "1.1000" }
{
"tags": {
"юр": 2,
"зозпп": 1,
"файл": 1,
"пароль": 1,
"сервер": 1
},
"data": [
{
"title": "заголовок 1",
"content": "запись 1",
"tags": [
"юр",
"зозпп"
]
},
{
"title": "заголовок 2",
"content": "запись 2",
"tags": [
"юр"
]
},
{
"title": "заголовок 3",
"content": "запись 3",
"tags": [
"файл",
"пароль",
"сервер"
]
}
]
}
0
- удаляете.const moveQueue = {
queue: [],
index: 0,
create() {
let endMoveCallback;
// создаём висячий промис и присваиваем его разрешение в endMoveCallback
const movePending = new Promise(resolve => endMoveCallback = resolve);
// index чисто для лога
endMoveCallback.index = this.index++;
// добавляем в очередь
this.queue.push(endMoveCallback);
// возвращаем проис ждущий вызова endMoveCallback
return movePending;
},
last() {
// забираем из очереди последнее добавленное
return this.queue.pop();
}
}
async function turn() {
await startMove();
await startShoot();
}
function startMove() {
console.log('startMove', moveQueue.index);
return moveQueue.create();
}
function endMove() {
const activeMoveEnd = moveQueue.last();
if (activeMoveEnd) {
console.log('endMove', activeMoveEnd.index)
activeMoveEnd();
} else {
onsole.error('`endMove` called when there are no active moves')
}
}
function startShoot() {
console.log('startShoot');
}
turn();
setTimeout(() => endMove(), 1000)
live-server
это не "стандартный сервер", это сторонний софт, причём мёртвый несмотря на название. Живой на данный момент форк - alive-server
. Но проблема, если что, не в этом.:)