Я пытаюсь проанализировать некоторый код javascript, для которого я использую функцию перезаписи, чтобы вызовы в JS-библиотеку проходили через код javascript. Мой JavaScript-код является частью расширения Chrome, и я устанавливаю/внедряю его через скрипты контента на DOM целевой страницы через расширение chrome. Это прекрасно работает для функций, вызванных после загрузки страницы, и вызовы библиотеки проходят через мою функцию. Но есть JavaScript-код, который запускается во время загрузки страницы (возможно, при визуализации DOM). Это происходит до ввода моего пользовательского скрипта. Таким образом, вызовы функций перед тем, как вводится пользовательский скрипт, потеряны для меня, или эти вызовы JS не проходят через мою функцию. Я использую Content Script, чтобы на самом деле ввести другой JavaScript, добавив DOM, как указано в приведенной ниже ссылке.остановить javascript от запуска до того, как установлен скрипт контента
Insert code into the page context using a content script
Я знаю, что могу справиться время загрузки содержимого Script, чтобы быть в начале/конце DOM, но это еще один файл сценария, который я прилагаю к DOM целевой страницы, и я не похоже, понимают, как управлять им. Любая помощь любого человека очень ценится. Спасибо.
Редактировать: Проблема, описанная в Is it possible to run a script in context of a webpage, before any of the webpage's scripts run, using a chrome extension? , является абсолютно такой же, но решение, похоже, не работает. Мое намерение состоит в том, чтобы выполнить инъецированный скрипт, прежде чем какой-либо js-код будет выполнен с веб-страницы. Указав document_start в manifest.json, выполнение сценария содержимого может быть запущено до веб-страницы, но не сценарий, который я вставляю через скрипт содержимого (сценарий впрыска, как объяснено в первой ссылке). Этот впрыскивается скрипт не работает в какой-либо определенным образом по отношению к веб-странице
EDIT 2:
manifest.json файл манифеста имеет content.js добавлен в document_start сценарий контента. Таким образом, content.js запускается до запуска целевой страницы (базовой страницы).
"content_scripts":[
{
"matches":["<all_urls>"],
"js":["content.js"],
"run_at":"document_start",
"all_frames":false
}
],
content.js
content.js имеет следующий код, с которым я добавляю main.js к DOM, так что я на самом деле способен взаимодействовать с JavaScript, который находится в среде целевой страницы , Я делаю это из другого файла и присоединяю его к DOM, потому что я не могу взаимодействовать с JavaScript целевой страницы через Content Scripts, так как они оба не мешают друг другу. Чтобы объяснить далее, main.js имеет некоторый JavaScript, который перехватывает JS-вызовы во время выполнения JS на целевой странице. JS на целевой странице вызывает вызовы в библиотеку, и я намерен просто написать обертку для этих функций библиотеки.
var u = document.createElement('script');
u.src = chrome.extension.getURL('main.js');
(document.head||document.documentElement).appendChild(u);
u.onload = function() {
u.parentNode.removeChild(u);
};
Я ожидаю, что main.js доступен в домене целевой страницы и любой из сценариев в целевой страницы, так как я вводить его через скрипт контента, который выполняется на document_start. Предположим, что у меня есть вызов какой-либо функции JS, как это на моей целевой странице html, someJSCall() определяется доменом целевой страницы.
В этом сценарии main.js (код инжектированных через мое расширение хром) уже доступен. Поэтому вызовы в библиотеку JS из какой-либо функции функции проходят через функции оболочки main.js. Это прекрасно работает.
Проблема заключается в том, что есть IIFE (сразу вызываемые функциональные выражения), определенные в JS целевой страницы. Если эти вызовы IIFE вызывают вызовы библиотеки, это не проходит через мои перехваты main.js. Если я посмотрю файлы, загруженные в браузере с помощью инструментов Chrome Dev, я вижу, что main.js по-прежнему не загружается, когда выполняются вызовы IIFE.
Надеюсь, я подробно объяснил проблему. Пожалуйста, дайте мне знать, если это еще не ясно.
спасибо.
Пожалуйста, задавайте вопрос по теме: включите ** полный ** [mcve], который * дублирует проблему *. Включая * manifest.json *, некоторые из сценариев background/content/popup/HTML. Вопросы, требующие помощи по отладке («** почему этот код не работает? **)) должны включать: ► желаемое поведение, ► конкретную проблему или ошибку * и * самый короткий код, необходимый для его воспроизведения ** в вопросе сам**. Вопросы без четкого описания проблемы не полезны другим читателям. Смотрите: «** Как создать [mcve] **», [о каких темах я могу спросить здесь?] (Http://stackoverflow.com/help/on-topic) и [ask]. – Makyen
Возможный дубликат [Возможно ли запустить сценарий в контексте веб-страницы, прежде чем запускать какие-либо скрипты веб-страницы, используя расширение chrome?] (Http://stackoverflow.com/questions/13540636/is-it-possible -to-run-a-script-in-context-of-a-webpage-before-any-of-the-webpag) – rsanchez
Вы предоставили некоторые, неясные объяснения, почему это не дубликат. Тем не менее, вы все еще не предоставили то, что требуется для того, чтобы сделать отладочный вопрос по теме. Посмотрите мой первый комментарий для списка. Большая часть того, чего здесь нет, это ** [mcve] **. Без [mcve] (который дублирует возникшую у вас проблему и конкретно показывает, почему решение (ы) в связанном дубликате не решает вашу проблему), мы не сможем помочь вам. Дело не в том, что мы не хотим помогать, это то, что вы не предоставили достаточной информации для нас, чтобы иметь возможность сделать это. – Makyen