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

时间:2015-05-30 18:19:16

标签: javascript firefox firefox-addon firefox-addon-sdk mozilla

--- ----更新

经过更多的实验,我已经确定我写的内容脚本不是问题所在。例如,如果我将扩展名简化为:

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 个答案:

答案 0 :(得分:1)

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

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

    之后,重新启动firefox,看看你是否可以从控制台获得任何有用的东西。禁用其他插件以消除噪音。

  5. 尝试备份并删除整个firefox's profile folder,让firefox 100%清理。有帮助吗?如果是,则将问题缩小到简档中。
  6. 尝试更改插件的所有标识符(包括插件名称,ID,说明,按钮ID和说明等),从而制作新的重复插件。这有帮助吗?如果是的话,这很可能意味着当你玩它时,firefox会记住你的插件的一些设置。