2

Я пишу расширение chrome, которое должно быть способно запускать скрипт на этой странице, как только он был загружен. Я реализовал функцию для запуска кода при нажатии на значок расширения, но когда я добавил код, чтобы запустить этот скрипт на странице загрузки ее не работаетchrome extension для запуска скрипта на странице load

файл манифеста

{ 
    "name": "", 
    "description": "", 
    "version": "1.0", 

    "permissions": [ 
    "activeTab", 
    "tabs" 
    ], 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": false 
    }, 
    "browser_action": { 
     "default_title": "", 
    "default_icon": "6a00e3982283618833019affd3c028970c.png" 
    }, 
    "manifest_version": 2 
    } 

расслоение плотной файла:

chrome.tabs.onUpdated.addListener(
    function (tabId, changeInfo, tab) 
    { 
    if (changeInfo.status === "complete") 
    { 
     chrome.tabs.executeScript({ 
     code: "console.log('dsff');" 
    }); 
    } 
}); 

, но, несмотря на это, мой js не работает, когда пользователь меняет страницу на вкладке

ответ

7

Если вы зарегистрировали обратный вызов chrome.tabs.executeScript(...) поймать любые ошибки, например:.

chrome.tabs.executeScript({ code: "console.log('dsff');" }, function() { 
    if (chrome.runtime.lastError) { 
     console.log("ERROR: " + chrome.runtime.lastError.message); 
    } 
}); 

можно заметить следующее сообщение об ошибке:

ERROR: Cannot access contents of url "...". Extension manifest must request permission to access this host.

Таким образом, вам необходимо добавить host match pattern в список permissions в вашем манифесте. Например. чтобы иметь возможность внедрить код в любой http/https страницы:

"permissions": ["*://*/*"] 

Кроме того, если опустить tabId аргумент chrome.tabs.executeScript(...) он будет применяться к закладке активного (который может отложить от той, что обожженного событие onUpdated). Итак, также внесите следующие изменения:

chrome.tabs.executeScript(tab.id, { code: "console.log('dsff');" }, function() {... 
+0

Я дал разрешение, но его все еще не работает с помощью «Разрешения»: ["*: // */*"] он должен работать для файла: // , но когда оно не дает мне желаемого результата и его даже не показывает вывод функции обратного вызова – mebjas

+0

@mebjas: см. Мой обновленный ответ для еще одной возможной причины неожиданного поведения. Если он все еще не работает, проверьте журналы консоли (фоновая страница ** и ** обновленной вкладки) для любых ошибок. Кроме того, используйте 'chrome.runtime.lastError' (как показано в моем ответе), чтобы поймать любые ошибки при введении. – gkalpak

+0

благодарит свою работу :) – mebjas

0

Во-первых, почему вы используете тот же файл (background.js) для сценария содержания и фона.

контента скрипты не могут использовать хром * API,

+0

Добавил его, чтобы проверить, требуется ли это для запуска скрипта на каждой странице. , но это не работает, даже если я удалю его @Prabu – mebjas

Смежные вопросы