如果你要开始开发一个新的Firefox插件的今天,你还会使用XUL/JS或者你会开始使用Jetpack的,新的插件框架?
创建插件将继续在Firefox 4存在,但Jetpack的显然是建立蒸汽和我想象它会成为创造附加在未来的唯一途径的XUL方式.
现在是时候开始寻找切换/迁移到Jetpack了吗?
所以我现在多次查看Add-on SDK的文档,没有哪里可以看到如何创建工具栏或修改现有工具栏.他们有一个关于创建附加栏图标的教程,但这不是我想要的.附加SDK是否支持此功能?如果有,可以有人将我链接到示例/教程.
我有一个内容脚本,用于计算用户查看页面的时间.为此,我将内容脚本注入每个页面,启动计时器,然后在onbeforeunload触发事件时将消息发送回加载项.
但是,消息似乎永远不会传递给后台脚本.
鉴于我main.js看起来像这样:
var pageMod = require('page-mod'),
self = require("self");
pageMod.PageMod({
include: "http://*",
contentScriptFile: [self.data.url('jquery.min.js'),
self.data.url('content.js')],
onAttach: function(worker) {
worker.port.on('pageView', function(request) {
console.log("Request received");
});
}
});
Run Code Online (Sandbox Code Playgroud)
我可以main.js使用以下代码发送消息没问题.
self.port.emit('pageView', { visitTime: time });
Run Code Online (Sandbox Code Playgroud)
当我尝试按用户离开页面时遇到问题.当我这样做时,从未收到该消息:
$(window).bind('onbeforeunload', function(e) {
self.port.emit('pageView', { visitTime: time });
// This should prevent the user from seeing a dialog.
return undefined;
});
Run Code Online (Sandbox Code Playgroud)
我也试过听beforeunload,但这也行不通.可能是什么问题呢?
javascript firefox firefox-addon dom-events firefox-addon-sdk
我一直在使用Addon SDK开发一个Firefox扩展,需要加载一些存储在同一个包中的数据,作为一个单独的文件:"data.json".它需要从页面脚本加载,即使用脚本src标记包含在"panel.html"中的"loader.js".
结构是这样的:
+data
panel.html
panel.js
loader.js
data.json
...
+lib
main.js
...
Run Code Online (Sandbox Code Playgroud)
panel.html有:
<script type="text/javascript" src="loader.js"></script>
Run Code Online (Sandbox Code Playgroud)
最初我们将数据简单地存储到js文件中作为"data.js"并使用脚本src标签从"panel.html"中包含它并且它没有任何问题.但是,当我们向Mozilla Addon站点提交该附加组件时,这被解决为要解决的问题之一,并说我们需要使用非可执行格式,例如JSON文件,以使其更安全.
现在问题似乎是"loader.js"不允许向"data.json"发出AJAX请求.(使用JQuery $ .ajax()调用返回没有成功,给出错误代码0)所以我一直在考虑的解决方案是使用SDK的request()函数从"main.js"加载"data.json"并以某种方式将其传递给页面脚本"loader.js".但这似乎很复杂,因为据我所知,数据需要首先发送到内容脚本,然后从那里发送到页面脚本.这需要在加载页面脚本时发生!我对此感到困惑,因为我不确定我是否错过了一个更实用的解决方案,或者它是否真的像我想做的那样复杂,只需将包中的本地JSON数据加载到本地页面脚本中?
我没能在firefox扩展中注入CSS.这是我的代码.
var tbb = require('toolbarbutton').ToolbarButton({
id: 'button',
label: 'us-button',
image: self.data.url('img/on.png'),
onCommand: function () {
tabs.activeTab.attach ({
contentScriptFile: [
self.data.url('jquery/jquery.min.js'),
self.data.url('jquery/jquery-ui.js'),
self.data.url('recuperation.js'),
self.data.url('dialog.js')
],
contentStyleFile: self.data.url('jquery/jquery-ui.css'),
Run Code Online (Sandbox Code Playgroud)
我使用Erik Vold的工具栏按钮.contentStyleFile似乎不起作用.当我单击按钮时,会出现JQuery对话框但没有css文件.
我正在尝试将Chrome扩展程序移植到Firefox,我想知道什么是相同的,chrome.storage.local.set并且chrome.storage.local.get在Firefox中添加sdk.我想,是的simple-storage.
这是我的代码:
chrome.storage.local.set({'tokenFU': token});
[...]
chrome.storage.local.get('tokenFU',function(result){
token=result.tokenFU;
if(token && token != 'undefined'){
hideLog();
}
else
showLog();
});
Run Code Online (Sandbox Code Playgroud)
提前致谢 !
javascript google-chrome firefox-addon google-chrome-extension firefox-addon-sdk
我正在使用Firefox Add-on SDK创建扩展程序并执行PageMod.这段代码在main.js.
...
exports.main = function() {
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "*",
contentScriptWhen: 'end',
contentStyleFile: [
self.data.url("css/style.css"),
self.data.url("css/font-awesome.css")
],
contentScriptFile: [
self.data.url("js/jquery.js"),
self.data.url("js/spritzify.js")
],
onAttach: function onAttach(worker) {
worker.postMessage("Hello World");
}
});
};
...
Run Code Online (Sandbox Code Playgroud)
css/font-awesome.css虽然字体文件没有,但我会加载到页面中.
@font-face {
font-family: 'FontAwesome';
src: url('fonts/fontawesome-webfont.eot?v=4.1.0');
src: url('fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'), url('fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'), url('fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'), url('fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg');
font-weight: normal;
font-style: normal;
}
Run Code Online (Sandbox Code Playgroud)
fonts文件夹位于我的扩展程序的数据文件夹中.有人可以解释我如何使用PageMod将自定义字体加载到网页中!
我保留了一些用户数据simple-storage.当用户卸载加载项时,我想删除此用户数据.是否有某些事件或类似事件?
我们正在开发一个加载项,并希望将内容脚本注入首页和所有框架.但是我们发现内容脚本不能用src注入iframe作为"about:blank"或"javascript:...".
有什么意见/建议吗?
示例page-mod:
require("sdk/page-mod").PageMod({
include:["*", "file://*"],
contentScriptFile: [
"./content/content.js",
],
attachTo: ["existing","top", "frame"],...
Run Code Online (Sandbox Code Playgroud) 我有一个扩展,检查http-on-examine-response侦听器中的响应.在听众可以通过改变头的HTTPChannel,并通过nsITraceableChannel我们可以改变响应内容.
但是如何在http-on-examine-response监听器中更改响应代码(例如从407到200)?
一些代码:
const { Ci, Cu, Cc, Cr } = require('chrome');
Cu.import('resource://gre/modules/Services.jsm');
var observer = {
observe: function(aSubject, aTopic, aData) {
if (aTopic == 'http-on-examine-response') {
console.log('we are in observer http-on-examine-response');
var httpChannel = aSubject.QueryInterface(Ci.nsIHttpChannel);
if(httpChannel.responseStatus == 407){
httpChannel.responseStatus = 200; // <-- this is not working
}
}
}
};
Services.obs.addObserver(observer, 'http-on-examine-response', false);
exports.onUnload = function (aData, aReason) {
Services.obs.removeObserver(observer, 'http-on-examine-response');
};
Run Code Online (Sandbox Code Playgroud) firefox ×7
javascript ×3
ajax ×1
dom-events ×1
fonts ×1
jquery ×1
jquery-ui ×1
json ×1
toolbar ×1