Chrome扩展程序未在文档开始时运行脚本并且未打印内容

康纳·德莱尼(Connor Delaney)

我正在开发一个小型Chrome扩展程序,我不希望它在您转到google.com.au时自动重定向到“ redirect.js”,但无法正常工作。如果我手动转到“ redirect.js”中显示的“ blank.html”文件,则我的“ httpGet”功能将无法使用。

manifest.json:

{
  "name": "Simon Extended",
  "description": "Beautify's Simon.",
  "version": "1.0",
  "manifest_version": 2,

    "icons": {
    "512": "icon.png"
  },

  "background": {
    "scripts": ["redirect.js"]
  },

  "browser_action": {
    "default_title": "Simon Extended"
  },

  "content_scripts": [
    {
      "matches": ["http://google.com.au/*", "https://google.com.au/*"],
      "js": ["redirect.js"],
      "run_at": "document_start"
    }
  ]
}

redirect.js:

function httpGet(theUrl)
{
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            return xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET", theUrl, false );
    xmlhttp.send();    
}

chrome.browserAction.onClicked.addListener(function(tab) {
    window.open("blank.html")
    document.write(httpGet("http://google.com"))
});

blank.html:

<html>
    <head>
        <title>Blank</title>
    </head>
    <body>

    </body>
</html>
user13500
  1. 当您说出window.open("blank.html");一个新选项卡时,URL是您的扩展名。
  2. 当您想要进入write该窗口时,您必须说出类似以下内容:

    var win = window.open("blank.html");
    win.document.write('some HTML');
    
  3. 作为谷歌。com使用重定向到本地域,您必须将其添加ncr到以下路径:https : //www.google.com/ncr
  4. 由于XHR请求是跨域的,因此您必须在manifest.json文件中为目标域添加权限就像是:

    "permissions": [
        "http://www.google.com/*",
        "https://www.google.com/*",
    ]
    
  5. 由于这是Chrome的扩展程序,您知道它具有XMLHttpRequest,因此无需检查。此外,您可以使用onload代替onreadystatechange支票。

  6. 由于WHATWG和Chrome讨厌同步,因此您必须使用async请求

    open("GET", url, true);
    
  7. 现在的问题是您实际上并没有进行重定向,而是在google.com上获取了代码并将其写入扩展的本地html页面。因此,将无法访问资源的任何相对路径(例如图像,CSS,JavaScript文件等)。如果您想朝这个方向发展,则必须添加<base>,(或解析并重写所有相对URL)。

redirect.js那么您的决赛可能是这样的:

function http_set(url, win)
{
    var xhr = new XMLHttpRequest();
    xhr.onload = function() {
        var html = xhr.responseText.replace('<head>', '<head><base href="'+url+'">');
        win.document.write(html);
        win.document.close();
    }
    xhr.open("GET", url, true);
    xhr.send();
}

chrome.browserAction.onClicked.addListener(function(tab) {
    var win = window.open("blank.html");
    http_set("https://www.google.com/ncr", win);
});

直接前往:

因此,与其说从google.com加载HTML代码,不如说:

chrome.browserAction.onClicked.addListener(function(tab) {
    window.open("https://www.google.com/ncr");
});

现在。这样的效果是,当您单击扩展程序的图标时,将使用google.com打开一个新标签页。


真的直接去:

为了达到您要求的效果,您可以改用以下redirect.js文件:

window.location = "https://www.google.com/ncr";

是的,那是整个文件。然后,您可以删除清单文件中添加的权限,而仅添加触发器域。

匹配网址

为此:您还需要匹配www例如:

  "matches": [
    "http://google.com.au/*",
    "https://google.com.au/*",
    "http://www.google.com.au/*",
    "https://www.google.com.au/*"
  ],

当一切都说完了:

好的。说完所有这些之后,这可能不是解决问题的最佳方法。但我希望您至少学到了一两件事。

它的核心是:

  1. 练习并了解更多JavaScript。作为语言的核心。
  2. 为特定浏览器编写扩展程序时,您可以自由使用其拥有的实现-无需进行跨浏览器检查等。此外,您可以利用该特定浏览器库中的所有工具。
  3. 编写扩展时,您可以利用API所提供的更多后端功能。扩展时,许多事情通常会以不同的方式完成-因为您有大量的额外工具可以利用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Chrome扩展程序脚本仅在显示弹出窗口时运行

来自分类Dev

Chrome扩展程序脚本仅在显示弹出窗口时运行

来自分类Dev

在apache karaf开始时运行命令的脚本

来自分类Dev

更改时触发未在更改时运行脚本

来自分类Dev

Chrome扩展程序内容脚本未触发代码

来自分类Dev

Chrome扩展程序的内容脚本未注入特定网站

来自分类Dev

Chrome扩展程序内容脚本未触发代码

来自分类Dev

Chrome扩展程序的内容脚本未注入特定网站

来自分类Dev

Chrome扩展程序内容脚本永远不会运行

来自分类Dev

当监视器触发tmux时运行脚本或程序?

来自分类Dev

关闭时运行脚本

来自分类Dev

在开始时运行bash_aliases

来自分类Dev

在课程开始时运行代码

来自分类Dev

在XRDP会话开始时运行命令

来自分类Dev

在开始时运行Pulseaudio和蓝牙

来自分类Dev

chrome扩展程序:页面加载完javascript后运行脚本

来自分类Dev

开发Chrome扩展程序时,如何打开空白页以运行脚本?

来自分类Dev

如何在 ContextMenu 上运行脚本 单击 Chrome 扩展

来自分类Dev

Chrome扩展程序:如何使后台等待执行脚本?

来自分类Dev

在连接USB设备时运行脚本

来自分类Dev

在方向更改时运行脚本

来自分类Dev

如何在登录时运行脚本

来自分类Dev

在连接USB设备时运行脚本

来自分类Dev

如何在登录时运行脚本

来自分类Dev

当systemd服务失败时运行脚本

来自分类Dev

启动时运行脚本

来自分类Dev

Lubuntu,在启动时运行脚本

来自分类Dev

后台进程崩溃时运行脚本

来自分类Dev

特定用户注销时运行脚本