Я создаю расширение Firefox, и одна из его функций, которую я хотел бы, — это возможность для пользователя вводить скрипт или таблицу стилей на определенный веб-сайт, как Greasemonkey (за исключением того, что это будет только для одного сайта). Я добавляю некоторые функции для сценариев, которые я намеревался добавить из сценария содержимого в главное (небезопасное) окно. В блоге MDN, в нем говорится, что они внесли изменения в то, как это должно быть реализовано, поэтому я основывал свой код на новой реализации, как указано в посте, и вот что у меня есть:
var $jq = jQuery.noConflict();//Yes, I am also injecting jQuery at the same time
console.log("created jquery object"); //This works
exportFunction($jq, unsafeWindow, {defineAs: "$jq"});
console.log("This will never be called");
Но выполнение скрипта просто останавливается, а в консоли выводится Message: TypeError: window is null
. Я тестирую преимущественно в Firefox 28 (похоже, я не могу заставить Firefox для Ubuntu обновляться сверх этого прямо сейчас, и целый ряд проблем вынуждает меня использовать для этого Ubuntu на виртуальной машине), но в Nightly 31a1 (Win7 ) ничего никогда не вводится, включая жестко закодированный стиль (который работает на FF28), так что в какой-то момент мне придется это выяснить. (Код PageMod здесь:
var lttWorker = sdk.pageMod.PageMod({
include:["*"],
/*contentScriptFile: [sdk.data.url("jquery.large.js"), sdk.data.url("scripts/bootstrapper.js")],
contentScriptWhen: "ready",*/ //This is commented to test whether it was an issue with the script. It's not.
contentStyle: "#header_bar{background-color:green;}", //This is injected in FF28 but not 31
attachTo: ["existing", "top"],
onAttach: function(){desktopNotifications({title:"attached content worker", text:"The content worker has been successfully attached"})} //This is called in FF28 but not 31
});
lttWorker.on("error", function(){callError("pageWorker failed");}); //This never gets called. Ever.
если кому интересно)
РЕДАКТИРОВАТЬ: я попробовал это на Firefox 30b, и все еще есть множество проблем, хотя они, похоже, немного отличаются как от FF28, так и от 31...