我正在尝试为以下任务开发Chrome扩展程序,但却陷入困境: 有一个网页不定期更新网址,我希望扩展程序在后台定期检查更新,如果更新则保存新的网址。问题是Url是通过该网页域上的远程javascript生成的,其格式如下:
<p> Here's the Url: <script type="text/javascript" src="http://www.****.com/?***=***"></script> </p>
并且脚本只是
document.write("the_Url")
由于Chrome的安全策略,我无法在后台页面中运行该javascript因此我认为我必须打开该网页并从那里以某种方式获取Url。
所以在我的后台页面中,我会定期调用此
chrome.tabs.create({url:"Webpage_url", active:focusing}, function(tab) {
chrome.tabs.executeScript(tab.id, {file:"getUrl.js"});
});
我的getUrl.js就像:
$(document).ready(function(){
var write = document.write;
//overwrite document.write to save Url
document.write = function(Url)
{
//code here to save Url, for debug I tried just
console.log(Url);
}
//code here to parse html to get js_url: "http://www.****.com/?***=***", no id in original html, but definitely no problem here
$.getScript(js_url).done(function (s, state)
{
//after js run, set document.write back
document.write = write;
});
});
我必须这样做,因为我无法通过jquery ajax以纯文本形式获取javascript,它给了我:No&#39; Access-Control-Allow-Origin&#39;标题存在。
然而,使用上述方法我仍然会收到警告:&#34;无法执行&#39;写&#39; on&#39; Document&#39;:除非明确打开,否则无法从异步加载的外部脚本写入文档。&#34; 它就像覆盖document.write一样不起作用,但实际上如果我放了一个&#34; document.write(&#34; something&#34;)&#34;在$ .getScript部分上方,我可以成功保存&#34;某些东西&#34;。因此,覆盖似乎不会影响远程脚本。
我甚至尝试删除&#34; document.write = write&#34;重新定义,但仍然是相同的警告。
任何人都知道为什么?或者任何其他解决方案来完成原始任务都很好。谢谢。