【发布时间】:2013-07-29 09:45:46
【问题描述】:
我正在做一个扩展来自定义谷歌的主页背景。所以我在清单中写了一些匹配规则,如下所示:
"content_scripts": [
{
"matches": ["https://www.google.com/", "http://www.google.com/"],
"js": ["static/js/jquery.js", "static/js/contentscript.js"]
}
],
还有contentscript.js中的一些脚本:
var imgURL = chrome.extension.getURL("static/images/bg.jpg");
$('body').css('background-image', 'url(' + imgURL + ')');
该脚本适用于https://www.google.com,但是当我尝试搜索某些内容时,页面会跳转到https://www.google.com/#newwindow=1&sclient=psy-ab&q=Google&oq=Google&gs_l=hp.3..35i39l2j0i20l2j0l6.4788.5717.2.5939.5.3.2.0.0.0.142.397.0j3.3.0....0.0..1c.1.20.hp.xCFVga8gVZU&bav=on.2,or.r_cp.r_qf.&bvm=bv.49784469%2Cd.dGI%2Cpv.xjs.s.en_US.MpiVkF51mpA.O&fp=806ba48f5b2ed550&biw=1920&bih=963
但是跳跃后脚本仍然工作!如果我直接将长网址粘贴到新标签页中,它不会工作!
我认为它应该与 iframe 或 Ajax 或其他东西有关。有人可以提供更多细节吗?以及如何防止 url 更改后脚本运行?
【问题讨论】:
-
我不知道为什么当您直接访问搜索页面时它没有加载。我从来没有仔细检查过它,但谷歌似乎有点棘手:当你从他们的主页进行搜索时,我认为他们实际上从未加载过新页面。他们只是大量编辑现有页面的 DOM 以包含搜索结果(并使用 history API 允许您使用后退按钮,我认为)。因此,结果页面不是一个新页面,因此您的内容脚本仍在加载中。
-
我看到的是搜索结果页面有明显的重新加载动作,和Github不重新加载就改变URL的做法截然不同。
-
附言。来吧,你不需要 jQuery 来做一些像改变背景图片这样微不足道的事情:
document.body.style.backgroundImage = 'url(' + chrome.extension.getURL("static/images/bg.jpg") + ')';做同样的事情并为你节省很多字节。
标签: ajax google-chrome iframe google-chrome-extension google-search