覆盖document.write并不适用于通过$ .getScript进行远程javascript

时间:2017-11-21 17:09:06

标签: javascript jquery html google-chrome google-chrome-extension

我正在尝试为以下任务开发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;重新定义,但仍然是相同的警告。

任何人都知道为什么?或者任何其他解决方案来完成原始任务都很好。谢谢。

0 个答案:

没有答案