【发布时间】:2014-10-12 16:45:09
【问题描述】:
我的 manifest.json 文件中有一个基本内容脚本,我让它匹配某个 URL 并加载脚本。
"content_scripts": [
{
"matches": ["http://www.urlhere.com/videos/*"],
"js": ["scripts/jquery-2.1.1.min.js", "scripts/csScript.js"]
}
],
csScript.js 获取页面上的一个属性,并通过消息将其发送回background.js 脚本。
chrome.runtime.sendMessage({url: getUrl()});
function getUrl() {
url = $('meta[itemprop=contentURL]').attr('content');
return url;
}
background.js 页面获取带有属性值的消息,对其进行操作,然后显示page_action 图标。
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
url = manipulateUrl(request.url);
chrome.pageAction.show(sender.tab.id);
});
chrome.pageAction.onClicked.addListener(function(tab) {
console.log("url: " + url);
});
这一切都在第一个页面加载时正常运行 - 内容脚本被执行并且消息被传递。但是,该页面包含指向其他视频的链接...当我单击其中一个时,我注意到 Chrome 微调器在地址栏中加载了一个新 URL,但内容脚本没有再次执行。
当我点击我的page_action 图标时,我得到了传递的旧 URL,这表明内容脚本没有去获取页面的新 URL。
有什么想法吗?
【问题讨论】:
-
只是偶然,但是您确定单击链接时的新 URL 也与该字符串匹配吗?可能它会下降
http或变成https? -
几乎肯定它没有改变。
https从未出现在任何视频页面中,所以我认为这不是问题。我猜想必须在 DOM 中保持一致,以免内容脚本再次被注入,但我对扩展开发太陌生了,不知道。我也尝试过programmatic injection在单击page_icon时注入脚本,但同样的问题发生了——我从“旧”DOM 中获取旧 url 数据。 -
它是一个全新的 URL 还是只是改变的哈希部分(window.location.hash)?
-
绝对是一个新的 URL。如果我回到主页,然后单击一个视频,它工作正常。但是在视频结束后,我会得到一个建议视频的列表——如果我点击一个,微调器会旋转并加载一个新的 URL,但不会注入任何内容脚本。对我来说没有多大意义。
标签: javascript google-chrome-extension