2012-04-16 12 views
1

firefox addonを作成して、onclickイベントを特定のボタンに追加します。page-modを使用してJavaScriptによってロードされた要素を変更する方法

はTypeError:document.querySelector( "#のsend_top")がnullである

#をボタンがhttp://example.com/welcome#_pg=compose に配置されたが、私はページを開くと、次のエラーがoccuresさ

( "入力" 要素) send_topは、変更したいボタンのidです。したがって、ボタンは見つかりません。

このエラーは、http://example.com/welcomehttp://example.com/welcome#_pg=composeが完全に異なるページであるために発生します。 この場合、アドオンはロードhttp://example.com/welcomeと思われますが、 '#send_top' IDのボタンはありません。 #_pg = compose anchorを追加すると、ボタンがJavaScriptによって読み込まれます。

http://example.com/welcome#_pg=composeをロードしてボタンを変更するにはどうすればよいですか?あなたはこれをデバッグするのに役立つ

+0

このリンクを '#_pg = compose'で開くと、それはajaxリクエストを呼び出さないでしょうか? –

+0

はい、それはajaxスクリプトを呼び出してページを読み込んでいるようです。 –

答えて

2

三思考:

  1. 正しくあなたの代わりにページマッチ構文の正規表現を使用することを検討すべきであるURLと一致する - これはあなたがアンカーに反応できるようにするかもしれませんがより予測可能な方法

  2. JSによって大きく変更されたページでコンテンツスクリプトを使用すると、タイミングの問題が発生することがあります。ハックのある回避策は、あなたが望む要素を探し、それが存在しない場合は、100ミリ秒ほどsetTimeoutを実行してから、再度チェックすることです。醜い、はい、しかし、私は新しいTwitterのUIで使用されたいくつかのサンプルコードのために働いた。

  3. コンテンツスクリプトの変数unsafeWindowを使用すると、ページのウィンドウオブジェクトに直接アクセスできます。このオブジェクトには、JSがページに対して行った変更が含まれ、プロキシされません。ただし、セキュリティ上の問題が発生する可能性があるため、unsafeWindowを使用してください。特に、unsafeWindowから来るデータは決して信用すべきではありません。

+0

ありがとうございました。ご返信ありがとうございます。 (私はこのプロジェクトでは1〜2週間かかることができませんでした) 代わりにsetIntervalを使用してページを正常に修正しました。 window.onhashchangeはHTML5で利用可能ですが、変更したいページはHTML4に基づいているので、setIntervalを使用しました。 –

+0

この質問に答えてください。 :D – canuckistani

+0

ああ、私はその機能を知らなかった。それを指摘していただきありがとうございます。私はマークしました。 :) –

関連する問題