我希望向 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。
我正在尝试打开一个弹出窗口,等待X秒然后关闭弹出窗口.
(用例是向webapp发送通知 - 但我们不能只是执行GET请求,因为它需要在同一个会话中,因此我们可以使用登录会话)
我无法使用,setTimeout因为我们无法在附加组件/扩展中使用它
如何在不诉诸CPU周期的情况下获得类似的功能,这显然会导致明显的延迟?
我正在尝试学习如何为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插件?
我正在尝试在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,但我什么也没得到。请帮忙!
我正在进行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) 我正在创建(开发)一个 Firefox 插件,我需要找到浏览器的用户代理。在navigator.userAgent不工作。它表明navigator未定义。
我需要什么 Firefox 附加模块来获取用户代理,还是有其他方法可以在附加模块中找到它?
我正在使用Add-on构建器和Add-on SDK编写Firefox扩展.到目前为止,我已经能够解决任何限制,而无需转向XUL.但是,我遇到了障碍.
我的扩展有一个长时间运行的进程,可能会阻塞,所以我需要将此处理与主UI线程分开.我在这里读过这个问题,但它并没有完全回答我的问题.Web Workers是不够的,因为长时间运行的进程需要访问js-ctypes和本机代码.因此,似乎ChromeWorker可能会做到这一点.但是,我不知道如何从Add-on构建器访问它.此外,线程管理器只能通过C++代码访问.我怎么能:
避免阻止UI线程.或者,我可以使用本机代码(我正在努力避免).
我正在尝试使用他们的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) 我尝试启动: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) 我正在使用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