[英]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.