繁体   English   中英

如何使用Firefox扩展将JavaScript函数注入到所有网页

[英]How to inject a JavaScript function to all web page using Firefox extension

我正在开发一个Firefox插件。 我想要做的是注入自定义JavaScript函数。

function foo() {..}

因此,所有页面都可以调用foo而无需先定义它。

我从其他答案中了解到http//groups.google.com/group/greasemonkey-users/browse_thread/thread/3d82a2e7322c3fce

但它需要在网页上进行修改。 如果我想将函数foo注入Google.com怎么办? 有可能这样做吗?

我可以使用usercript来完成它,但是如果可能的话我想使用扩展方法。

我在阅读你的问题时首先想到的是“这看起来像一个骗局”。 你想要实现什么目标?

无论如何,这是一个Jetpack(加载项构建器)加载项,它在每个加载的页面中注入一个脚本

main.js:

const self = require("self"),
      page_mod = require("page-mod");

exports.main = function() {
    page_mod.PageMod({
        include: "*",
        contentScriptWhen: "ready",
        contentScriptFile: self.data.url("inject.js")
    });
};

inject.js:

unsafeWindow.foo = function() {
    alert('hi');
}

unsafeWindow.foo();

如果您在页面上使用javascript函数进行简单的href,该怎么办?
像bookmarklet一样工作。

这是一个示例代码:

function(scriptUrl) {

    var newScript = document.createElement('script');

    // the Math.random() part is for avoiding the cache
    newScript.src = scriptUrl + '?dummy=' + Math.random();

    // append the new script to the dom
    document.body.appendChild(newScript);

    // execute your newly available function
    window.foo();

}('[url of your online script]')


要使用它,请输入脚本的URL。
它必须只有一行代码,url格式化,但为了代码可读性,我已经形成了它。

我从来没有开发过Firefox扩展,但是对于javascript注入,我就是这样做的。

希望它有所帮助。

您可以使用Sandbox

// Define DOMContentLoaded event listener in the overlay.js
document.getElementById("appcontent").addEventListener("DOMContentLoaded", function(evt) {
    if (!evt.originalTarget instanceof HTMLDocument) {
        return;
    }

    var view = evt.originalTarget.defaultView;
    if (!view) {
        return;
    }

    var sandbox = new Components.utils.Sandbox(view);
    sandbox.unsafeWindow = view.window.wrappedJSObject;
    sandbox.window = view.window;
    sandbox.document = sandbox.window.document;
    sandbox.__proto__ = sandbox.window;

    // Eval your JS in the sandbox
    Components.utils.evalInSandbox("function foo() {..}", sandbox); 
}, false);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM