#javascript #google-chrome-extension
#javascript #google-chrome-extension
Вопрос:
Я столкнулся с проблемой с моим расширением Chrome. Я могу использовать опцию Chrome «Просмотр источника страницы», чтобы видеть определенную переменную как до, так и после динамического обновления страницы. Однако, используя наш внедренный скрипт, мы можем извлекать переменную только до динамического обновления страницы. Мы можем видеть в источнике страницы, что переменная, похоже, обновлена, но мы не знаем, могут ли скрипты содержимого просто не извлекать обновленные переменные или есть какая-то проблема с использованием инъекций для этой конкретной проблемы.
Я не смог найти ни одной подобной проблемы, когда расширение должно быть в состоянии поддерживать динамически обновляемые страницы и их переменные, и поэтому я в недоумении.
inject() {
function propagateVariable(handShake) {
var message = { handShake };
message['window'] = staticVariableName;
window.postMessage(message, "*");
}
if (document.getElementById('myExtensionNode')) {
var elem = document.getElementById('myExtensionNode');
elem.parentNode.removeChild(elem);
}
var script = `( ${propagateVariable.toString()} )('${this.handshakeKey}');`
var scriptTag = document.createElement('script');
var scriptBody = document.createTextNode(script);
scriptTag.id = 'myExtensionNode';
scriptTag.appendChild(scriptBody);
document.body.append(scriptTag);
}
У меня есть этот скрипт, привязанный к слушателю и наблюдателю за мутациями, чтобы следить за динамическими обновлениями страниц, с логикой для поиска конкретных изменений, которые нас интересуют. По сути, считайте, что это связано с нажатием кнопки, так что я могу получать переменную всякий раз, когда нажимаю кнопку.
Если у вас есть какие-либо идеи или вам нужна дополнительная информация, я постараюсь обновить свой пост по мере необходимости. Спасибо!
Комментарии:
1. Этот фрагмент кода корректен и будет считывать глобальную переменную
staticVariableName
из контекста страницы. Итак, единственное объяснение заключается в том, что переменная не обновляется или вы не запускали весь этот код в то время, когда переменная фактически обновлялась. PS Вы можете удалить тег script сразу после его запуска, потому что нет необходимости хранить его в DOM.2. @wOxxOm спасибо, что просмотрели его. Я также воспользовался вашим советом и удаляю введенный скрипт намного раньше. К сожалению, я почти уверен, что и переменная обновляется, и я запускаю ее в то время, когда она была обновлена. Я могу перевести страницу из ее начального состояния во второе состояние, затем через десять минут я могу изменить ее на третье состояние, и мне все еще возвращается переменная из первого состояния. Просмотр источника страницы показывает, что глобальная переменная обновилась еще до инициализации моего сообщения «Страница обновлена, запущен скрипт».
3. Если переменная существует, ее значение не связано с изменениями в исходном коде html. Значение изменяется либо уже запущенным кодом JavaScript, либо при добавлении нового элемента script, который переопределяет ту же переменную.