Вопрос по onupdate, reload, javascript, google-chrome-extension, manifest – Как запустить этот скрипт при перезагрузке вкладки (расширение chrome)?

5

Поэтому я хотел бы запустить скрипт, когда вкладка перезагружается по указанному 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, это не так. Я не могу найти проблему. Я что-то не так напечатал?

Зацеплениеstackoverflow.com/q/23333771/632951 Pacerier
Вы проверяли ошибки в консоли разработчика? Я думаю, что вам нужно запустить это из фоновой страницы, а не из скрипта контента. Я полагаю, что скрипты содержимого могут использовать только chrome.extension, и все другие методы API должны вызываться на странице background.js. QFDev

Ваш Ответ

2   ответа
1

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

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

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

При условии, что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-адрес был изменен и, следовательно, не является обновлением. И наоборот, если он не существует, то страница должна быть только обновлена.

@BeardFist, вы уверены, что это работает, как ожидалось? Не будет ли этот огонь даже дляchangeInfo.status и тд и тп? Pacerier
Спасибо, это работает, но как я могу запустить этот скрипт, если сверху есть еще одна вкладка? András Geiszl
Поэтому, когда я перезагружаю вкладку, но меняю вкладку. Тогда скрипт не запускается, потому что это не тот (например, translate.google.hu) веб-сайт. András Geiszl
@Geiszla Что вы подразумеваете под другой вкладкой сверху? BeardFist
Большой! Я написал ту же функцию для других вещей для своего расширения, но я не знал аргументов обратного вызова onUpdate. Спасибо, это мне очень помогло +1 M98

Похожие вопросы