Как внедрить функцию JavaScript во все веб-страницы с помощью расширения Firefox - PullRequest
4 голосов
/ 15 января 2012

Я разрабатываю аддон Firefox. Что я хочу сделать, так это внедрить пользовательскую функцию JavaScript.

т.е.

function foo() {..}

Таким образом, все страницы могут вызывать foo без предварительного определения.

Я смотрю из другого ответа, такого как: http://groups.google.com/group/greasemonkey-users/browse_thread/thread/3d82a2e7322c3fce

Но это требует модификации на веб-странице. Что, если, возможно, я захочу добавить функцию foo в Google.com? Возможно ли это сделать?

Я могу сделать это с помощью пользовательского сценария, но я хочу использовать подход расширения, если это возможно.

Ответы [ 3 ]

6 голосов
/ 16 января 2012

Первое, что я подумал, читая ваш вопрос, было «это похоже на мошенничество». Чего ты пытаешься достичь?

В любом случае, вот дополнение 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();
1 голос
/ 16 января 2012

Вы можете использовать Песочница

// 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);
1 голос
/ 15 января 2012

Что делать, если вы создадите простой href с функцией javascript на странице.
Как работает букмарклет.

Вот пример кода:

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 я бы так и катился.

Надеюсь, это помогло.

...