2016-12-06 61 views
0

我正在研究一个Chrome扩展,它将侦听域上的URL更改,并且当URL匹配模式时,将一些HTML附加到DOM。Chrome扩展 - 当URL更改时附加到页面

我的manifest.json看起来像这样:

{ 
    "name": "Append to DOM", 
    "description": "Testing", 
    "version": "1", 
    "manifest_version": 2, 
    "content_scripts": [ 
     { 
      "matches": [ 
       "http://www.somedomain.com/*" 
      ], 
      "js": [ 
       "content.js" 
      ] 
     } 
    ], 
    "permissions": ["tabs", "activeTab"] 
} 

和content.js看起来像这样:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
    if (changeInfo.url == 'http://www.somedomain.com/matching-pattern') { 
     var myDiv = document.createElement("div"); 
     myDiv.innerHTML = 'SAMPLE HTML'; 
     document.body.appendChild(myDiv); 
    } 
}); 

然而,听者不火(和股利不附加)当网址已更新。

任何帮助表示赞赏。

+1

你确定听众没有发射,问题不在于URL与你的模式不符?你在这里使用了完整的网址;像https一样小的东西可能会毁掉比赛。 (也许正则表达式模式会更好) – Andrew

+0

@Andrew这是有效的,但即使我拿出条件(所以在任何标签URL更改),我没有看到div附加,这导致我相信听众不是射击。 –

+0

您可以使用'console.log(“test”)或类似命令来检查侦听器是否正在触发? (只是建议这种情况下,一些奇怪的事情将不允许附加div) – Andrew

回答

1

内容脚本不访问chrome.tabs 您可以在后台脚本

使用chrome.tabs为了处理URL的变化的内容脚本,始终工作在便宜的解决方案 - 使用setInterval

var prevURL = ''; 
setInterval(function() { 
    if (document.location.href != prevURL) { 
     // do something 
     prevURL = document.location.href; 
    } 
}, 1000);