簡體   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