Как запустить этот скрипт при перезагрузке вкладки (расширение chrome)?

Поэтому я хотел бы запустить скрипт, когда вкладка перезагружается по указанному URL. Это почти работает, но на самом деле идентификатор не :) Это мой файл манифеста:

{
"manifest_version": 2,

"name": "Sample Extension",
"description": "Sample Chrome Extension",
"version": "1.0",

"content_scripts":
[
    {
      "matches": ["http://translate.google.hu/*"],
      "js": ["run.js"]
    }
],

"permissions":
[
    "activeTab",
    "tabs"
],

"browser_action":
{
    "default_title": "Sample",
    "default_icon": "icon.png"
}
}

и это run.js:

chrome.tabs.onUpdated.addListener(
function ( tabId, changeInfo, tab )
{
    if ( changeInfo.status === "complete" )
    {
        chrome.tabs.executeScript( null, {file: "program.js"} );
    }
}
);

Programs.js просто предупреждает некоторый текст (пока). Когда я помещаю предупреждение в первую строку файла run.js, оно предупреждает, но когда я помещаю его в if, это не так. Я не могу найти проблему. Я что-то не так напечатал?

 Pacerier10 авг. 2017 г., 08:13
 QFDev05 июн. 2013 г., 23:45
Вы проверяли ошибки в консоли разработчика? Я думаю, что вам нужно запустить это из фоновой страницы, а не из скрипта контента. Я полагаю, что скрипты содержимого могут использовать только chrome.extension, и все другие методы API должны вызываться на странице background.js.

Ответы на вопрос(2)

Решение Вопроса

При условии, чтоhttp://translate.google.hu/* страницы - это те, в которые вы хотите внедрить код при перезагрузке, вам придется пойти по этому пути немного по-другому. В настоящее время вывсегда ввод кода на эти страницы (без разрешения, не менее), а затем попытка использоватьchrome.tabs API внутри этого скрипта контента, который вы не можете сделать. Вместо этого мы поместим слушателя на фоновую страницу и вставим код только при обновлении страницы, как вы хотите. Сначаламанифест:

{
  "manifest_version": 2,
  "name": "Sample Extension",
  "description": "Sample Chrome Extension",
  "version": "1.0",
  "background": {
    "scripts": ["background.js"]
  },
  "permissions":[
    "http://translate.google.hu/*", "tabs"
  ]
}

background.js

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){
  if (tab.url.indexOf("http://translate.google.hu/") > -1 && 
      changeInfo.url === undefined){
    chrome.tabs.executeScript(tabId, {file: "program.js"} );
  }
});

Это будет слушатьonUpdated событие, проверяет, является ли он одним изurlЭто то, что мы хотим внедрить, и затем он проверяет, была ли страница перезагружена. Этот последний шаг выполняется путем проверки, еслиchangeInfo.url существует. Если это так, то это означает, что URL-адрес был изменен и, следовательно, не является обновлением. И наоборот, если он не существует, то страница должна быть только обновлена.

 BeardFist07 июн. 2013 г., 22:43
@Geiszla Что вы подразумеваете под другой вкладкой сверху?
 András Geiszl07 июн. 2013 г., 21:59
Спасибо, это работает, но как я могу запустить этот скрипт, если сверху есть еще одна вкладка?
 M9825 апр. 2017 г., 21:16
Большой! Я написал ту же функцию для других вещей для своего расширения, но я не знал аргументов обратного вызова onUpdate. Спасибо, это мне очень помогло +1
 András Geiszl07 июн. 2013 г., 23:25
Поэтому, когда я перезагружаю вкладку, но меняю вкладку. Тогда скрипт не запускается, потому что это не тот (например, translate.google.hu) веб-сайт.
 Pacerier10 авг. 2017 г., 08:04
@BeardFist, вы уверены, что это работает, как ожидалось? Не будет ли этот огонь даже дляchangeInfo.status и тд и тп?

content_scripts запускаются при каждой (повторной) загрузке страницы, поэтому лучше всего использовать их для обнаружения.

Таким образом, вы также не рискуете запустить какой-либо код вbackground до вашегоcontent_script готов принять любое сообщение.

 Pacerier10 авг. 2017 г., 08:06
Кажется, есть ошибка Chrome, из-за которой иногда манифест содержимого не запускается при загрузке страницы. Видетьstackoverflow.com/questions/19191679/...

Ваш ответ на вопрос