Сценарий содержимого расширения Chrome не может прослушивать событие, пока страница не будет обновлена

Я хотел бы создать расширение для вставки html на каждую открытую страницу, как только она будет установлена ​​без перезагрузки.

веб-страница.html:

<html>
<head>
<meta charset="utf-8" />
<title>Extension</title>
<script>
  var go = function() {
    var event = document.createEvent('Event');
    event.initEvent('hello');
    document.dispatchEvent(event);
  };
</script>
</head>
<body>
<a href="javascript:go();">Click me</a> 
</body>
</html>

манифест.json:

{
  "name": "Chrome Extension Test",
  "version": "0.1",
  "description": "Test",
  "manifest_version": 2,

  "background" : { 
    "persistent": true,
    "scripts": ["background.js"]
  },  

  "permissions": ["http://*/*", "https://*/*"],
  "content_scripts": [{
    "matches": ["http://*/*", "https://*/*"],
    "js": ["content_script.js"]
  }]  
}

content_script.js:

(function() {
  document.addEventListener("hello", function(data) {
  chrome.runtime.sendMessage("test");
 });
})();

фон.js:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  alert("message received");
  console.log("background message received");
});                 

Если расширение уже установлено, оно работает. Но если расширение установлено после загрузки веб-страницы, сценарий содержимого не может получить событие, отправленное с веб-страницы, если только не перезагрузить.

Есть ли способ получить событие в сценарии контента без перезагрузки?


person tnrgus    schedule 29.05.2014    source источник


Ответы (1)


Здесь есть длинный канонический ответ.

Короче говоря, если вам нужен скрипт контента при инициализации, вы должны сделать chrome.tabs.query({}, ...); при инициализации фонового скрипта, который будет внедрять скрипты во все вкладки с chrome.tabs.executeScript({file: "content_script.js"});.

person Xan    schedule 29.05.2014