簡體   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