1

特定のボタンにonclickイベントを追加するFirefoxアドオンを作成しています。(「入力」要素)

ボタンはhttp://example.com/welcome#_pg=composeに配置されていますが 、ページを開くと、次のエラーが発生します。

TypeError:document.querySelector( "#send_top")がnull

#send_topは、変更するボタンのIDです。そのため、ボタンが見つかりません。

このエラーは、 http //example.com/welcomeとhttp://example.com/welcome#_pg=composeが完全に異なるページであるために発生します。この場合、アドオンはhttp://example.com/welcomeをロードしているように見えますが、「#send_top」IDを持つボタンはありません。#_pg = composeアンカーが追加されると、ボタンはJavaScriptによってロードされます。

http://example.com/welcome#_pg=composeをロードしてボタンを変更するにはどうすればよいですか?

4

1 に答える 1

2

これをデバッグするのに役立つ3つの考え:

  1. URLを正しく一致させるには、ページ一致構文の代わりに正規表現を使用することを検討する必要があります。これにより、より予測可能な方法でアンカーに反応できる可能性があります。

  2. JSによって大幅に変更されたページでコンテンツスクリプトを使用すると、タイミングの問題が発生する可能性があることがわかりました。ハッキーな回避策は、必要な要素を探し、そこにない場合は、100ミリ秒程度のsetTimeoutを実行してから、再チェックすることです。醜いですが、たとえば、新しいTwitterUIで使用したサンプルコードでは機能しました。

  3. コンテンツスクリプトで変数を使用してunsafeWindow、ページのウィンドウオブジェクトに直接アクセスできます。このオブジェクトには、JSがページに加えた変更が含まれ、プロキシされません。unsafeWindowただし、その使用はセキュリティ上の問題の可能性があるため、十分に注意して使用する必要があります。特に、から来るデータを決して信頼してはいけませんunsafeWindow

于 2012-04-16T19:36:25.520 に答える