2016-05-04 18 views
2

Firefox 46のリリースで壊れているXULベースのFirefox拡張機能をデバッグしています。"Invalid chrome URI"例外のスタックトレースを取得するには?

私は拡張子を実行し、Browser consoleショー:どちらも行番号やスタックトレースを

Invalid chrome URI:/

ウェブフォーラムでは、I've read ChromeBugを使用することができます。その後、私はChromeBug(1.7.2)の最新の安定版を試しましたが、それはoctから更新されていません。最近のFirefoxのバージョンと互換性がないようです。

拡張子は「旧式」なのでAdd-on debuggerを使用できないため、Browser toolboxを使用しましたが、例外は表示されません。

拡張子の行数を考慮すると、コード内をさまよっていることはオプションではありません。どのように私はスタックトレースを取得することができます任意のアイデア?

+0

chrome.manifestに不正な形式のURLなどが含まれている可能性があります。使用しているすべてのクロームURL(コンテキスト、つまりオーバーレイまたは.jsのコードブロックを含む)を一覧表示できますか? –

+0

@ChuckBakerコメントありがとうございました。私が修正しなければならなかったバグは、実際にこの警告に関連していませんでした。しかし、私はまだこの種の警告をどのように辿るかを学ぶことに興味があります。 –

+0

あなたの状況では、ソリューションがあなたのために機能することを確認できるように、いくつかのコードが良いか、AMOの拡張子へのポインタになります。 – Makyen

答えて

3

エラーが発生していることに関する情報がほとんどないブラウザコンソールでこのタイプのエラーが発生すると、そのエラーはJavaScriptやおそらくコード内でさえない可能性があります。このような場合は、JavaScriptスタックトレースが存在しないため、取得できません。

このようなことは、通常、開いているポップアップやタブで使用されるXULやHTMLの問題が原因です。アドオンでは、のchrome://restclient/content/restclient.htmlという内容のタブが開きます。そのファイルを内容のないHTML文書に置き換えると、エラーはなくなります。

このファイルの内容をバイナリ検索する(一度にファイルの半分ずつコメントアウト/削除し、エラーがまだ存在するかどうかをテストして)、Aにエラーがあることを確認し、B )エラーの原因となっているものを、次の行でエラーがブラウザコンソール(ライン197)に表示させていることを決定する上での結果は:

<input class="span5" style="width:-moz-calc(100% - 1em) !important;" type="password" name="password" autocomplete="on" placeholder="Password"> 

もう少しテストがtypeがあるときに問題が消えることを示していないpassword。元のHTML文書をfile: URLで簡単にアクセスできる場所にコピーすると、文書を開いたときにブラウザコンソールにそのようなエラーは発生しません。

したがって、chrome: URIからロードすると、Mozillaのコードでは<input type="password">のバグであるという結論になります。

スタックトレースせずにコードに無効なchrome: URIを検索:
問題はHTMLやXULファイルに見つかりませんでした場合、あなたのアドオンで使用されているchrome:のURIに目を通すことが必要であろう何が原因であるかを見つける。

chrome: URIは、私たちは、このような問題を追跡しての利点を取ることができますいくつかのプロパティを持っている:

  • chrome: URIは通常静的です。
  • chrome: URIは通常の形式でchrome:\\packageName\{content,skin,locale}
  • を来るあなたのにchrome.manifestファイルがchrome: URIは、あなたのアドオン/パッケージに対して有効であることができるかを定義します。
  • その他chrome.manifestファイルは、アドオン/パッケージ外で有効なURIを定義します。

だからあなたにchrome.manifestファイルを初めて目:

content restclient    content/ 
resource restclient    ./ 

overlay chrome://browser/content/browser.xul chrome://restclient/content/overlay.xul 
overlay chrome://navigator/content/navigator.xul chrome://restclient/content/overlay.xul 
style chrome://global/content/customizeToolbar.xul chrome://restclient/content/css/overlay.css 

これはあなたのパッケージで、唯一の有効な内部chrome: URIは形式chrome://restclient/content/になり、を参照することを教えてくれるコンテンツあなたのアドオンのルートディレクトリ内のディレクトリ。

ここで、アドオンで使用されているすべてのchrome:個のURIを探します。これを行うには、コマンドラインgrep -nri chrome: *が簡単に実行できます。 grepは、複数のオペレーティングシステムで標準ユーティリティプログラムとして利用できます。 Windowsでは、通常Cygwinから取得します。今

chrome.manifest:4:overlay chrome://browser/content/browser.xul chrome://restclient/content/overlay.xul 
chrome.manifest:5:overlay  chrome://navigator/content/navigator.xul  chrome://restclient/content/overlay.xul 
chrome.manifest:6:style chrome://global/content/customizeToolbar.xul chrome://restclient/content/css/overlay.css 
content/css/overlay.css:30: list-style-image: url("chrome://restclient/content/images/icon16.png") !important; 
content/css/overlay.css:33: list-style-image: url("chrome://restclient/content/images/icon16.png") !important; 
content/js/restclient.js:51:  i18nStrings = new restclient.StringBundle("chrome://restclient/locale/restclient.properties"); 
content/js/restclient.main.js:1040:  xslDocument.load("chrome://restclient/content/xsl/XMLPrettyPrint.xsl"); 
content/js/restclient.main.js:1053:  xslDoc.load("chrome://restclient/content/xsl/XMLIndent.xsl");*/ 
content/js/restclient.overlay.js:68: browser.selectedTab = browser.addTab("chrome://restclient/content/restclient.html"); 
content/overlay.xul:2:<?xml-stylesheet href="chrome://restclient/content/css/overlay.css" type="text/css"?> 
content/overlay.xul:7: <script type="application/x-javascript" src="chrome://restclient/content/js/restclient.js" /> 
content/overlay.xul:8: <script type="application/x-javascript" src="chrome://restclient/content/js/restclient.overlay.js" /> 
content/overlay.xul:23:     image="chrome://restclient/content/images/icon16.png" 
content/overlay.xul:35:    image="chrome://restclient/content/images/icon16.png" 
content/overlay.xul:46:    image="chrome://restclient/content/images/icon16.png" 
content/overlay.xul:58:    image="chrome://restclient/content/images/icon16.png"/> 
modules/StringBundle.js:59: *  new StringBundle("chrome://example/locale/strings.properties"); 

を、我々はできる、そしておそらく、手動での問題のためにそれに目を通す必要がありますが、私たちはコマンドで明白な問題を発見するために迅速にリストを短くすることができます:そのコマンドから、我々が得るgrep -nri chrome: * | grep -v chrome://restclient/content/を。これにより、あなたのアドオンのcontentへの参照の形式になっていないchrome:のURIが得られます。取得したリストには、アドオン外のファイルを参照する有効なchrome: URIが簡単に含まれる可能性があります。だから、我々はより多くのチェックをする必要があるかもしれない。上記のコマンドから、我々が得る:

content/js/restclient.js:51:  i18nStrings = new restclient.StringBundle("chrome://restclient/locale/restclient.properties"); 
modules/StringBundle.js:59: *  new StringBundle("chrome://example/locale/strings.properties"); 

最初はlocalechrome: URIです。 chrome.manifestlocaleを指定していません。したがって、それは確かに無効です。 の51行目を参照してください。コンテンツ/ js/restclient.jsアクティブなコードです。実際に使用されると、無効になります。

2番目の可能性は、典型的な例のchrome:です。行は*で始まり、コメントである可能性があることを示唆しています。行59の/StringBundle.jsの行がコメントであることを示しています。

問題が見つからなかった場合は、既知の無効なchrome:のURIを解決し、問題が解決したかどうかをテストします。この例では、問題点がわかっているので、確認する必要はありません。

しかし、chrome://restclient/locale/restclient.propertiesが無効であることを考えると、A)、それはそのコードが実行された場合、それが失敗することを意味し、あなたのにchrome.manifestで定義されているあなたのアドオンおよびB)なしlocaleには、このようなファイルはありません。基本的には、関数restclient.i18nは死んでいる/悪いコードなので削除する必要があります。その機能がモジュール/ StringBundle.jsファイルの唯一の使用である場合、それも削除することができます。明らかに、これがあなたが積極的に取り組んでいるものなら、それは別の話です。これらは本質的にエラーはありませんが、それは一般的ではないに望ましい

21:26:37.975 SyntaxError: test for equality (==) mistyped as assignment (=)?1 chrome://restclient/content/js/bootstrap.js:1557:33 
21:26:37.989 TypeError: variable url redeclares argument1 chrome://restclient/content/js/restclient.main.js:376:8 

がこれに取り組んで、私はまた、あなたはおそらくを見てみなければならないブラウザコンソールで他のエラーのカップルを指摘しましたアドオンが正常に動作している間は、ブラウザコンソールに何かが表示されます。しかし、jquery.jsで報告されているさまざまなエラーを考えてみましょう。

+0

非常に広範なレビューをいただきありがとうございます。 –

+0

私はこの厳密な問題を抱えていますが、それはアドオン(アドオンを無効にして再起動したことを確認しました)、通常の ''(別のPHPファイルの中に含まれています)これを修正する方法はありますか?それがバグであれば、それはmozilla bugtrackerに報告されていますか? –

+0

@ChazyChaz、それが同じ問題であるかどうかを見るには、完全な[mcve]を見る必要があります。効果的には、あなた自身の質問を投稿する必要があることを意味します。 – Makyen

関連する問題