【问题标题】:Inject functions/variables to page from a chrome extension从 chrome 扩展中注入函数/变量到页面
【发布时间】:2012-04-29 15:31:12
【问题描述】:


我正在编写一个 Chrome 扩展程序,为用户访问的某些页面添加功能。
为此,我需要注入一些页面需要能够调用的变量和函数。
这些变量/函数在内容脚本中生成。

但是,由于内容脚本在一个隐蔽的环境中运行,主机页面无法访问它。

根据这篇文章: http://code.google.com/chrome/extensions/content_scripts.html#host-page-communication 内容脚本和主机页面可以通过添加事件通过 DOM 进行通信。
但这是一种可怕的做事方式,我真的很想看到一些轻松注入方法/变量的方法。

有这种可能吗?

谢谢!

【问题讨论】:

标签: javascript google-chrome google-chrome-extension content-script


【解决方案1】:

如果它仍然对任何人感兴趣,我已经找到了一个解决方案,通过消息在内容脚本和页面本身之间进行通信。

在发送脚本上是这样的:

window.postMessage({ type: "messageType", params: { param: "value", anotherParam: "value" } }, "*"/*required!*/);

然后在接收脚本上做这样的事情:

window.addEventListener("message", function(event) {
        // We only accept messages from ourselves
        if (event.source != window)
            return;

        switch (event.data.type) {
        case "blabla":
            // do blabla
            // you can use event.data.params to access the parameters sent from page.
            break;
        case "another blabla":
            // do another blabla 
            break;
        }
    });

【讨论】:

    【解决方案2】:

    这是我在扩展程序中的编码方式,http://pagexray.com/extension/

    在您的 manifest.json 中

     "content_scripts": [
        {
            "matches": ["http://*/*"],
            "js": ["script.js"]
        }
    ],
    

    在你的 script.js 上

    (function(){
      var script = document.createElement('script');
      script.src = "http://example.com/external.js";
      script.addEventListener('load', function() { });
      document.head.appendChild(script);
    })();
    

    【讨论】:

    • 这并不能真正回答我的问题。 JS 文件在扩展名中,而不是在 http:// url 中。
    猜你喜欢
    • 2012-02-18
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2012-10-19
    相关资源
    最近更新 更多