2016-06-13 8 views
0

Firefox 47へのアップグレード後に、Application.activeWindowはもう動作しません。Firefox 47 - Application.activeWindowがアドオンで動作しない

それは時にクラッシュ:

var doc = Application.activeWindow.activeTab.document; 

任意のアイデアなぜですか?アドオンはこの2年以来完全に動作していた。 XULアドオンでドキュメントオブジェクトを取得する方法は推奨されていません。

答えて

1

のFirefox 47の代わりに

  • VARドキュメント= Application.activeWindow.activeTab.documentで

    Application.activeWindow 
    

    もはや作品である理由。

我々はまた、同じ仕事をしていません

var chromeWindow = Services.wm.getMostRecentWindow('navigator:browser'); 
    var doc = chromeWindow.content.document; 

を使用することができます。

Application.activeWindow.activeTab.documentcontent.documentに置き換えて問題を修正しました。

私はFirefoxで上記のため、非推奨の警告ページを見つけることができる40

https://developer.mozilla.org/en-US/docs/Mozilla/Tech/Toolkit_API/FUEL/fuelIWindow

あなたが最も最近アクティブなウィンドウのアクティブなタブのドキュメントを取得することができ
+0

を私が興味を持っている:私はちょうど 'content.document'をしようとすると、私はcontent'ではない'ことを見つける上記のいずれかのために

、あなたが役立つかもしれないいくつかの追加のオブジェクトを取得することができます定義された。 'content'を定義するコードは何ですか? – Makyen

+0

@Makyen XULツールバーのボタンを押す - 私はvar doc = content.documentを呼び出す関数を呼び出します。興味深い。 –

+0

再起動しないXULベースのアドオンでテストしています。関数は、Firefoxのツールバーボタンのコマンドイベントのハンドラから呼び出されます。私の場合、 'typeof content' =' 'undefined ''です。コードのどこかに 'content'を定義していないのですか? – Makyen

0

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; 
} 

これはほぼすべてのコンテキストで機能します。

ボタンからcommandイベントへの応答としてこのコードが実行されていることをコメントに記載しました。

var window = event.view; 
var document = window.content.document; 

documentは、イベントが発生したウィンドウ内の現在のタブのHTML文書になること:それはあなたが使用することができさえハンドラであることを考えます。

let gBrowser = window.gBrowser; 
let primeDocument = window.document;//The primary document container for that Firefox window. 
let mainXULWindow = window.document.getElementById("main-window"); 
関連する問題