Unable to use Components in WebExtensions: get "ReferenceError: Cu is not defined"
Unable to use Components in WebExtensions: get "ReferenceError: Cu is not defined"
我有一个简单的扩展,我使用 Cu.import
导入 JavaScript code module。但是,当我加载扩展时,出现此错误:
Cu is not defined
我尝试使用的代码是:
Cu.import("resource://gre/modules/MatchPattern.jsm");
Cu.import("resource://gre/modules/BrowserUtils.jsm");
var regExArray = [];
var myArray = ["facebook.com", "google.com"];
var myURL="http://www.google.co.uk/?gfe_rd";
for (var x=0; x<myArray.length; x++)
{
console.log("loop: "+x);
var match = new MatchPattern(/(http:\/\/)(.*\.)*(myArray[x])(\/.*)*(\/)*/);
log("match result is: "+match.matches(myURL));
}//end for loop
我知道如何使用 require
在 Firefox Add-on SDK 中定义 Cu
,但如何在 WebExtesnions 中定义它?
您可以不在WebExtensions
中使用Components
对于较旧的 Firefox 扩展类型,Components
对象提供了对 Firefox 中低级功能的访问。常见的别名是:
Cc = Components.classes
Ci = Components.interfaces
Cu = Components.util
Cr = Components.results
Cm = Components.manager
components = Components
在附加 SDK 中,这些在 Chrome Authority 文档中进行了描述,并且可以通过使用
var {Cc, Ci, Cu, Cr, Cm, components} = require("chrome");
Components
在 WebExtensions
中不存在
WebExtensions 中不存在对这些低级功能的访问 。从您的代码中删除它并忘掉它。不要尝试使用任何与之相关的东西,因为你不能这样做。取消对 Components
提供的低级功能的访问是转向 WebExtensions 的具体原因之一。
如果您在 MDN 的某个页面中看到它,那么该页面与 WebExtensions 无关,对于 WebExtensions 开发应该忽略。您应该会在每个此类页面的顶部看到 一个大警告,说明您应该使用 WebExtensions 而不是该页面上描述的技术。当前 (2017-06-17) 的警告如下所示:
如果您需要旧扩展中存在的东西,但 WebExtensions 中没有,请尝试 WebExtensions Experiment
您可以通过构建 WebExtensions Experiment 来扩展 WebExtensions 的功能。目的是允许附加组件开发人员为建议包含到 Firefox 中的 WebExtensions 创建新的 API。但是,不能保证此类建议会实际集成到 Firefox 中。
我有一个简单的扩展,我使用 Cu.import
导入 JavaScript code module。但是,当我加载扩展时,出现此错误:
Cu is not defined
我尝试使用的代码是:
Cu.import("resource://gre/modules/MatchPattern.jsm");
Cu.import("resource://gre/modules/BrowserUtils.jsm");
var regExArray = [];
var myArray = ["facebook.com", "google.com"];
var myURL="http://www.google.co.uk/?gfe_rd";
for (var x=0; x<myArray.length; x++)
{
console.log("loop: "+x);
var match = new MatchPattern(/(http:\/\/)(.*\.)*(myArray[x])(\/.*)*(\/)*/);
log("match result is: "+match.matches(myURL));
}//end for loop
我知道如何使用 require
在 Firefox Add-on SDK 中定义 Cu
,但如何在 WebExtesnions 中定义它?
您可以不在WebExtensions
中使用Components
对于较旧的 Firefox 扩展类型,Components
对象提供了对 Firefox 中低级功能的访问。常见的别名是:
Cc = Components.classes
Ci = Components.interfaces
Cu = Components.util
Cr = Components.results
Cm = Components.manager
components = Components
在附加 SDK 中,这些在 Chrome Authority 文档中进行了描述,并且可以通过使用
var {Cc, Ci, Cu, Cr, Cm, components} = require("chrome");
Components
在 WebExtensions
中不存在
WebExtensions 中不存在对这些低级功能的访问 。从您的代码中删除它并忘掉它。不要尝试使用任何与之相关的东西,因为你不能这样做。取消对 Components
提供的低级功能的访问是转向 WebExtensions 的具体原因之一。
如果您在 MDN 的某个页面中看到它,那么该页面与 WebExtensions 无关,对于 WebExtensions 开发应该忽略。您应该会在每个此类页面的顶部看到 一个大警告,说明您应该使用 WebExtensions 而不是该页面上描述的技术。当前 (2017-06-17) 的警告如下所示:
如果您需要旧扩展中存在的东西,但 WebExtensions 中没有,请尝试 WebExtensions Experiment
您可以通过构建 WebExtensions Experiment 来扩展 WebExtensions 的功能。目的是允许附加组件开发人员为建议包含到 Firefox 中的 WebExtensions 创建新的 API。但是,不能保证此类建议会实际集成到 Firefox 中。