繁体   English   中英

无法在XUL Firefox扩展中获取TinyMCE的实例

[英]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附加组件通常在未定义全局windowdocument对象的范围内运行(如果定义了它们,则取决于输入当前正在运行的代码部分的方式)。 即使它们被定义,他们往往不被定义为window ,或document您期待(在window / document当前选项卡的)。 您可能需要获取对最近访问的窗口/选项卡的两个对象的引用。

如果存在浏览器窗口(在某些情况下,您可能正在不存在任何浏览器窗口的情况下运行,例如在启动时),则可以使用以下内容获取对最新浏览器windowdocumentgBrowser

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上继续运行一段时间,但最终可能会消失。

参考文献:

  1. nsIWindowMediator
  2. 在Chrome代码中使用Windows
  3. SDK: window / utils
  4. SDK: Windows

此答案的大部分内容是从我以前的答案中复制而来的,包括此链接此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM