gpt4 book ai didi

javascript - firefox 扩展通过 sdk 工作,但在浏览器中安装时不工作 - 兼容性问题?

转载 作者:数据小太阳 更新时间:2023-10-29 04:51:03 26 4
gpt4 key购买 nike

---更新----

在对此进行更多试验后,我确定我编写的 contentScript 不是这里的问题。例如,如果我将扩展名缩减为:

var buttons = require('sdk/ui/button/action');
var data = require("sdk/self").data;
var self = require("sdk/self");


var button = buttons.ActionButton({
id: "library-link",
label: "External Resource Locator",
icon: self.data.url("icon-16.png"),
});

当我通过 SDK 运行扩展程序时,该按钮仍会出现,但当我在当前的 firefox 浏览器(版本 38,在某些平台上)中安装 xpi 时,该按钮不会出现。这个问题似乎在他们的设计过程中发生在一个非常基本的层面。


我正在尝试为 firefox 编写一个简单的扩展,它将一个表单附加到当前页面并将数据发布到另一个站点。它可以通过操作按钮或上下文菜单项调用。

我一直在使用附加 sdk 进行开发,当我使用 cfx run 对其进行测试时,它运行良好。但是,在执行 cfx xpi 并将扩展安装到我的 firefox 浏览器后,它根本不起作用。操作按钮和上下文菜单项不会出现,尽管扩展显示在加载项下 -> 已安装和启用的扩展,但不会显示与 xpi 打包的任何图像。

我不确定是什么原因造成的,而且我的代码相当简短,所以我将添加整个 main.js:

var buttons = require('sdk/ui/button/action');
var data = require("sdk/self").data;
var contextMenu = require("sdk/context-menu");
var self = require("sdk/self");

var menuItem = contextMenu.Item({
label: "Look for selected text in the Library of Babel",
context: contextMenu.SelectionContext(),
contentScript: 'self.on("click", function () {' +
'var text = window.getSelection().toString();' +
'var formext = document.createElement("form");' +
'formext.setAttribute("method", "POST");' +
'formext.setAttribute("action", "https://libraryofbabel.info/resourcelocator.cgi");' +
'var hiddenField = document.createElement("input");' +
' hiddenField.setAttribute("type", "hidden");' +
'hiddenField.setAttribute("name", "extension");' +
' hiddenField.setAttribute("value", window.getSelection().toString());' +
' formext.appendChild(hiddenField);' +
' document.body.appendChild(formext);' +
' formext.submit();' +
'});',
image: self.data.url("icon-16.png")
});

var button = buttons.ActionButton({
id: "library-link",
label: "External Resource Locator",

icon: {
"16": "./icon-16.png",
"32": "./icon-32.png",
"64": "./icon-64.png"
},
onClick: function() {
require("sdk/tabs").activeTab.attach({
contentScriptFile: data.url("form.js")
});
}
});

我注意到,当我运行 cfx xpi 时,自动生成的 install.rdf 文件显示兼容性的最高版本是 30.0。但是,我还发现在某些运行 firefox 版本(包括 38)的计算机上它可以完美运行。此代码中是否有任何内容会阻止与较新版本的 firefox 兼容?我将添加 ContentScriptFile 以防万一:

function getSelectedText() {
var text = "";
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return text;
}

var bodytext = document.getElementsByTagName("BODY")[0];
var formext = document.createElement("form");
formext.setAttribute("method", "POST");
formext.setAttribute("action", "https://libraryofbabel.info/resourcelocator.cgi");
//formext.setAttribute("target","_blank");

var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "extension");
hiddenField.setAttribute("value", getSelectedText() || document.body.innerHTML); // take selected text OR bodytext

formext.appendChild(hiddenField);
document.body.appendChild(formext);
formext.submit();

最佳答案

  1. 在您的图标所在的工具栏上打开上下文菜单,选择 Customize...。在打开的窗口中,你能在“其他工具和功能”中看到你的图标吗?如果是,则意味着 firefox 在您开发插件时记住了该图标的缺失。您可以手动将图标放到工具栏上。我相信普通用户不会遇到这个问题。
  2. install.rdf 中手动更改您的 em:maxVersion
  3. 按照 Setting up an extension development environment 中的说明配置您的 firefox ,即至少这些:

    • javascript.options.showInConsole = true 在 F12 控制台中显示插件错误
    • javascript.options.strict = true 在控制台中有更多警告
    • extensions.logging.enabled = true 在控制台中出现安装/更新问题。

    之后,重新启动 firefox 并查看是否可以从控制台获得有用的信息。禁用其他插件以消除噪音。

  4. 尝试备份并删除整个 firefox's profile folder , 让 Firefox 100% 干净。有帮助吗?如果是,则将问题缩小到个人资料。
  5. 尝试更改插件的所有标识符(包括插件名称、ID、描述、按钮 ID 和描述等),从而制作一个新的重复插件。这有帮助吗?如果是,那很可能意味着 firefox 在您使用它时记住了您的插件的一些设置。

关于javascript - firefox 扩展通过 sdk 工作,但在浏览器中安装时不工作 - 兼容性问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30549732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com