首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的外接程序是从使用GM_函数的Greasemonkey脚本编译的,在火狐版本31+中不起作用。

我的外接程序是从使用GM_函数的Greasemonkey脚本编译的,在火狐版本31+中不起作用。
EN

Stack Overflow用户
提问于 2014-11-03 09:37:37
回答 1查看 395关注 0票数 0

我有一个Firefox插件,它是一个基于覆盖的扩展,在Firefox版本中最多可以使用31。但它在32版及以上版本中不起作用。我通常使用用户脚本编译器工具来构建我的扩展。从我的扩展中,我看不到控制台中的任何东西(错误/输出)。

不过,当我使用Greasemonkey插件运行我的脚本时,它工作得很好。问题是在将扩展名构建为XPI文件后运行扩展名。

以下是我的扩展结构:

代码语言:javascript
复制
myextension
 |-->skin
    |-->classic
 |-->content
    |-->myscript.user.js
    |-->myscriptPrefman.js
    |-->myscriptScript-compiler.js
    |-->myscriptXmlhttprequester.js
    |-->script-compiler-overlay.xul
 |-->chrome
 |-->install.rdf
 |-->icon.png
 |-->chrome.manifest

以下是install.rdf文件的内容:

代码语言:javascript
复制
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<em:id>{9ef9b86c-03da-4e10-9552-e97a6d258af5}</em:id>
<em:name>Sample Extension</em:name>
<em:version>2.6</em:version>
<em:description>A sample extension - Firefox</em:description>
<em:creator>Mozdev</em:creator>
<em:contributor>Greasemonkey Compiler by Anthony Lieuallen;</em:contributor>
<em:contributor>http://arantius.com/</em:contributor>
<em:homepageURL>www.example.com</em:homepageURL>
<em:targetApplication><Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>2.0</em:minVersion>
<em:maxVersion>35.*</em:maxVersion>
</Description>
</em:targetApplication>
</Description>
</RDF>

chrome.manifest内容:

代码语言:javascript
复制
content myextension content/
overlay chrome://browser/content/browser.xul   chrome://myextension/content/script-compiler-overlay.xul
skin myextension classic/1.0 skin/classic/

我需要更改扩展中的任何内容,还是将其转换为引导扩展,还是使用外接程序SDK来构建XPI文件?

更新:

我跟踪了Wladimir提出的附加SDK方法并创建了一个XPI安装程序文件。但是用户脚本没有在页面中运行。

代码仍然运行于Greasemonkey插件中。

在Greasemonkey中运行良好的这是Greasemonkey脚本,但在编译器和SDK都不能将其转换为扩展时就不行了。

在我的本地机器上,我遵循了安装步骤这个附加的SDK。我使用cfx命令构建XPI文件。我将其安装在Firefox最新版本(Ver.33.0.2)中,并访问openuserjs.org --我什么也看不见。为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-02 22:22:56

我只是通过使用Firefox进行GM_XmlhttpRequest和本地存储来本地存储信息来复制代码。并让脚本使用消息传递与main.js进行通信,消息传递是Restartless的主干。

代码语言:javascript
复制
var data = require("self").data;
var pageMod = require("page-mod");
pageMod.PageMod({
  include: "*.example.com", //mywebsite url
  contentScriptWhen: 'start',
  contentScriptFile: data.url("contentScript.js")
});

contentScriptFile是您想要编写用户脚本并使用最新火狐AddonSDK API中的端口消息与main.js通信的地方。

我使用请求API从服务器获取信息,而不是使用不受支持的GM_xmlhttpRequest。

代码语言:javascript
复制
var Request = require("sdk/request").Request;
var userDetails = Request({
  url: "http://example.com/user/1",
  onComplete: function (response) {
    var res = response.json[0];
  }
});

现在,扩展是无启动的,完全使用Firefox文档中的高级和低级api重新编写。希望将来的浏览器修改将使用这些api,并支持更长时间的扩展。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26711408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档