标签: firefox-addon-sdk

带有附加 SDK 的 Firefox 中的自定义上下文菜单?

我希望向 firefox 上下文菜单添加一个菜单项,该菜单项仅在用户右键单击特定 url 时才会显示。我有一个测试网址的功能。我曾经通过订阅“popupshowing”事件来做到这一点,并且:

var item = document.getElementById("custom-menu-id");
if (item) // show only for specific links
    item.hidden = gContextMenu.onLink && acceptableURL(gContextMenu.linkURL);
Run Code Online (Sandbox Code Playgroud)

我现在正在尝试使用 Add-on SDK,但在那里我无法再访问 gContextMenu。文档中的这个片段对我不起作用:

var cm = require("sdk/context-menu");
cm.Item({
    label: "Copy name to clipboard",
    context: cm.URLContext("http://scholar.google*"), 
    contentScript: 'self.on("context", function(node) {return true; });'
});
Run Code Online (Sandbox Code Playgroud)

在这里,我认为应该可以得到类似 node.URL 的东西并进行测试,但它不起作用。也许有人可以建议如何从 sdk 访问 gContextMenu 或如何从节点或其他东西获取 URL。

javascript firefox-addon-sdk

4
推荐指数
1
解决办法
2014
查看次数

如何在不使用setTimeout的情况下在firefox扩展中睡觉?

我正在尝试打开一个弹出窗口,等待X秒然后关闭弹出窗口.

(用例是向webapp发送通知 - 但我们不能只是执行GET请求,因为它需要在同一个会话中,因此我们可以使用登录会话)

我无法使用,setTimeout因为我们无法在附加组件/扩展中使用它

如何在不诉诸CPU周期的情况下获得类似的功能,这显然会导致明显的延迟?

javascript firefox firefox-addon firefox-addon-sdk

4
推荐指数
1
解决办法
2617
查看次数

消息:SyntaxError:missing:属性id之后

我正在尝试学习如何为firefox做简单的添加.我基于这个教程.

这是我的代码:

LIB/main.js

var self = require("sdk/self");

var button = require("sdk/ui/button/action").ActionButton({
  id: "style-tab",
  label: "Style Tab",
  icon: "./icon-16.png",
  onClick: function() {
    require("sdk/tabs").activeTab.attach({
        contentScriptFile: [self.data.url("jquery.js"), self.data.url("edit-page.js")]
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

数据/编辑page.js

$("body div").css("visibility", "hidden");
$("body").append( $("#addon_hide_page") );

var styles = {
    width: "100%",
    height: "100%",
    backgroud-color: "gray"
}

$("body #addon_hide_page").css(styles);
Run Code Online (Sandbox Code Playgroud)

错误输入到此问题的标题中:"消息:SyntaxError:missing:after property id".正如所见:"id"后面有一个":"(main.js中的第四行).发生什么了?

BTW:有没有比在Windows CMD中阅读那些无用语句更好的方法来调试firefox插件?

javascript firefox firefox-addon firefox-addon-sdk

4
推荐指数
1
解决办法
1156
查看次数

Pale Moon 中简单的 Firefox 扩展“不兼容”错误

我正在尝试在Pale Moon (Firefox 的变体)中使用一个非常基本的扩展。

lib\main.js:

var data = require("sdk/self");
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
    include: "*.annoyingsite.com",
    contentScriptFile: [data.url("script.js")] 
});
Run Code Online (Sandbox Code Playgroud)

lib\script.js:

document.getElementById("annoyingElement").setAttribute("style", "display: none;");
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

[extension_name] could not be installed because it is not compatible with Pale Moon 24.7.2
Run Code Online (Sandbox Code Playgroud)

我尝试阅读 CFX 文档并在 stackoverflow 上查看。minVersion我发现的唯一提示可能是与/ maxVersionin有关install.rdf,但我什么也没得到。请帮忙!

javascript firefox firefox-addon firefox-addon-sdk palemoon

4
推荐指数
1
解决办法
826
查看次数

TypeError document.querySelector(...)为null

我正在进行FF扩展,我遇到了障碍.这就是我所拥有的:

var canLink = document.querySelector('link[rel="service"]').href;
Run Code Online (Sandbox Code Playgroud)

这找到了一个rel ="service"的链接,效果很好.但是,如果页面没有与rel = service的链接,它将返回null并突破程序的其余部分.我怎样才能使它如果canLink = null,它不会破坏?

有没有办法捕捉到这个错误?

这是文件.第12行是self.port.emit,它工作正常.

//Get link if it exists
var elem = document.querySelector('link[rel="service"]').href,
canLink = elem ? elem.href : "";

if (canLink){
    self.port.emit("link", canLink);
}

else {
        canLink = "";
        self.port.emit("link", canLink);
}
Run Code Online (Sandbox Code Playgroud)

javascript firefox firefox-addon firefox-addon-sdk

4
推荐指数
1
解决办法
8399
查看次数

如何在 Firefox Add On 中找出浏览器的用户代理

我正在创建(开发)一个 Firefox 插件,我需要找到浏览器的用户代理。在navigator.userAgent不工作。它表明navigator未定义。

我需要什么 Firefox 附加模块来获取用户代理,还是有其他方法可以在附加模块中找到它?

javascript firefox-addon firefox-addon-sdk

4
推荐指数
1
解决办法
581
查看次数

Firefox扩展中的并发和多线程

我正在使用Add-on构建器和Add-on SDK编写Firefox扩展.到目前为止,我已经能够解决任何限制,而无需转向XUL.但是,我遇到了障碍.

我的扩展有一个长时间运行的进程,可能会阻塞,所以我需要将此处理与主UI线程分开.我在这里读过这个问题,但它并没有完全回答我的问题.Web Workers是不够的,因为长时间运行的进程需要访问js-ctypes和本机代码.因此,似乎ChromeWorker可能会做到这一点.但是,我不知道如何从Add-on构建器访问它.此外,线程管理器只能通过C++代码访问.我怎么能:

  1. 访问并实例化Chrome Workers(或)
  2. 创建线程(或)
  3. 假并发(不知何故)

避免阻止UI线程.或者,我可以使用本机代码(我正在努力避免).

firefox firefox-addon firefox-addon-sdk

3
推荐指数
1
解决办法
2425
查看次数

Firefox插件中的脚本之间的通信sdk - self.port不存在

我正在尝试使用他们的sdk创建一个firefox插件,但我不知道如何让我的js脚本进行通信.目标是制作一个带有表格的面板,有3个复选框,选中后可以隐藏/显示活动选项卡上的某些元素.

以下是脚本:main.js:

var data = require("sdk/self").data;

var painel1 = require("sdk/panel").Panel({
    width: 215,
    height: 160,
    contentURL: data.url("painelDestroyer.html"),
    contentScriptFile: [data.url("jquery.js"),data.url("panel.js")]
});

require("sdk/widget").Widget({
    id: "open-form-btn",
    label: "Clear",
    contentURL: data.url("mozico.png"),
    panel: painel1
});

// Attach a content script to the current active tab
let worker = require("sdk/tabs").activeTab.attach({
    contentScriptFile: data.url("clear.js")
});


painel1.port.on("show-tag",function(tag){
    worker.port.emit("show-tag", {tag:tag});
    console.log("worker emited");
});

painel1.port.on("hide-tag",function(tag){
    worker.port.emit("clear-tag", {tag:tag});
    console.log("worker emited");
});
Run Code Online (Sandbox Code Playgroud)

painel.js:

$("#imgD").click(function() {
    if ($(this).is(":checked")) {
        panel.port.emit("clear-tag","img");
        console.log("panel emited");
    } else {
       panel.port.emit("show-tag","img");
       console.log("panel emited");
    }
});
$("#aD").click(function() {
    if ($(this).is(":checked")) { …
Run Code Online (Sandbox Code Playgroud)

javascript firefox firefox-addon firefox-addon-sdk

3
推荐指数
1
解决办法
2767
查看次数

Firefox Add-on SDK错误

我尝试启动:cfx run但我收到以下错误:

(C:\Users\michal smoczyk\Downloads\addon-sdk-1.14) C:\Users\michal smoczyk\Downloads\addon-sdk-1.14\my-addon>cfx run
Using binary at 'C:\Program Files\Mozilla Firefox\firefox.exe'.
Using profile at 'c:\users\michal~1\appdata\local\temp\tmpkcrwv7.mozrunner'.
Traceback (most recent call last):
  File "C:\Users\michal smoczyk\Downloads\addon-sdk-1.14\bin\cfx", line 33, in <module>
    cuddlefish.run()
  File "C:\Users\michal smoczyk\Downloads\addon-sdk-1.14\python-lib\cuddlefish\__init__.py", line 928, in run
    bundle_sdk=options.bundle_sdk)
  File "C:\Users\michal smoczyk\Downloads\addon-sdk-1.14\python-lib\cuddlefish\runner.py", line 706, in run_app
    runner.start()
  File "C:\Users\michal smoczyk\Downloads\addon-sdk-1.14\python-lib\mozrunner\__init__.py", line 529, in start
    self.process_handler = run_command(self.command+self.cmdargs, self.env, **self.kp_kwargs)
  File "C:\Users\michal smoczyk\Downloads\addon-sdk-1.14\python-lib\mozrunner\__init__.py", line 59, in run_command
    return killableprocess.Popen(cmd, env=env, **killable_kwargs)
  File "C:\Python27\lib\subprocess.py", line 709, in __init__
    errread, errwrite)
TypeError: …
Run Code Online (Sandbox Code Playgroud)

python windows firefox firefox-addon-sdk

3
推荐指数
1
解决办法
1184
查看次数

firefox sdk:如何在侧边栏外部使用emit

我正在使用SDK Tutorial网站中的代码:

var sidebar = require("sdk/ui/sidebar").Sidebar({
    id: 'my-sidebar',
    title: 'My Sidebar',
    url: require("sdk/self").data.url("sidebar.html"),
    onAttach: function (worker) {
       // listen for a "ready" message from the script
       worker.port.on("ready", function() {
       // send an "init" message to the script
       worker.port.emit("init", "message from main.js");
    });
 }
});
Run Code Online (Sandbox Code Playgroud)

这非常有效.现在的问题是,这只允许我通过work.port onAttach发送一些东西(以及侧栏上的3个其他事件).我需要的是使用此侧栏范围之外的emit函数.例如,如果我在同一个main.js中使用一个类似于标签的监听器

tabs.on('ready', function(tab) {
    sidebar.worker.port.emit("init", "message from main.js");
}
Run Code Online (Sandbox Code Playgroud)

这不起作用.我也试过了

 sidebar.port.emit("init", "message from main.js");
Run Code Online (Sandbox Code Playgroud)

要么

 worker.port.emit("init", "message from main.js");    
Run Code Online (Sandbox Code Playgroud)

没有成功.

我也尝试将标签监听器放在侧边栏的onAttach中(所以监听器内部是一个监听器),但这也无效.

有人对那个有想法吗?谢谢.

javascript firefox firefox-addon firefox-sidebar firefox-addon-sdk

3
推荐指数
1
解决办法
590
查看次数