[英]Cannot get instance of TinyMCE in XUL Firefox extension
我正在尝试在JavaScript中为Firefox扩展获取tinyMCE编辑器的实例。
当我在控制台中键入window.tinyMCE
时,它返回一个对象; 但是,当尝试在Firefox扩展中的JavaScript中获取tinyMCE编辑器的实例时,我使用window.content.tinyMCE
并得到undefined
例如,我试图查看在带有我的Firefox扩展的页面上是否存在tinyMCE编辑器。 这是我的代码:
if (window.content.tinyMCE) {
alert('its there!');
}
TinyMCE编辑器存在于页面上,但不会警告以上代码。 当我发出alert(window.content.tinyMCE)
,它会发出undefined
警报。
在XUL中, Window.content
返回主要内容窗口的Window对象。 https://developer.mozilla.org/zh-CN/docs/Web/API/Window/content
Window对象肯定在那里,因为当我在控制台中键入window.tinyMCE
时,它会返回tinyMCE对象。
有人知道我在做什么错吗?
最有可能的问题是, window
在您的扩展不是window
你期待的对象。
Firefox附加组件通常在未定义全局window
和document
对象的范围内运行(如果定义了它们,则取决于输入当前正在运行的代码部分的方式)。 即使它们被定义,他们往往不被定义为window
,或document
您期待(在window
/ document
当前选项卡的)。 您可能需要获取对最近访问的窗口/选项卡的两个对象的引用。
如果存在浏览器窗口(在某些情况下,您可能正在不存在任何浏览器窗口的情况下运行,例如在启动时),则可以使用以下内容获取对最新浏览器window
, document
和gBrowser
:
if (window === null || typeof window !== "object") {
//If you do not already have a window reference, you need to obtain one:
// Add/remove a "/" to comment/un-comment the code appropriate for your add-on type.
/* Add-on SDK:
var window = require('sdk/window/utils').getMostRecentBrowserWindow();
//*/
//* Overlay and bootstrap (from almost any context/scope):
var window=Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator)
.getMostRecentWindow("navigator:browser");
//*/
}
if (typeof document === "undefined") {
//If there is no document defined, get it
var document = window.content.document;
}
if (typeof gBrowser === "undefined") {
//If there is no gBrowser defined, get it
var gBrowser = window.gBrowser;
}
如果您是为了响应事件(例如按钮command
事件)而运行代码,则可以使用以下方法获取当前window
:
var window = event.view
许多人在编写Firefox附加组件时会遇到一个问题,即缺少全局window
可用的document
对象,或者缺少引用的对象。
注意:如果要与多进程Firefox (Electrolysis或e10s)本地兼容,那么访问当前文档的内容将更加复杂。 有一些垫片可以使您的代码在多进程Firefox上继续运行一段时间,但最终可能会消失。
参考文献:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.