4

私は、ブラウザーの現在の Web ページで発生した HTML イベントをリッスンする C# で記述された BHO/ツールバーに取り組んできました。このソリューションには、HtmlPageEventManager と呼ばれる再利用可能なクラスが含まれています。このクラスの目的は、開かれた新しい Web ページごとに特定の HTML イベント リストをサブスクライブすることです。目標は、ページの読み込みが完了する前であっても、ユーザーがページ要素との対話を開始できるようになるとすぐにハンドラーをアタッチすることです。このクラスの使用は簡単です。コンストラクターを呼び出すだけです。

var evts = 新しいリスト() {
    HtmlEvent.onclick、HtmlEvent.ondblclick、HtmlEvent.onkeydown、
    HtmlEvent.onselectstart、HtmlEvent.onselectionchange、
    HtmlEvent.onfocus、HtmlEvent.onselect
};
new HtmlPageEventManager( this, evts, this.HtmlEventHandler );

ここから私のソリューションをダウンロードして試してみて、フィードバックを送ってください。有用であると思われる場合は、ご自身のプロジェクトで自由に使用してください。うまく機能しますが、イベントの添付に失敗する場合があります。私はそれらの状況を特定するのに苦労しました。したがって、HtmlPageEventManager を改善するための助けを借りることができます。

私のソリューションはSpicIEのアセンブリを参照していますが、上記のダウンロードには含まれていないため、SpicIE の Web サイトから入手する必要があります。ところで、これはおそらく質問する良い機会です: SpicIE はどのくらい人気がありますか? 使用するより良いツールはありますか?

4

2 に答える 2

2

うん!BHO の DownloadComplete イベントをサブスクライブすることで、"Refresh" の問題を解決しました。ここで、HTML イベント ハンドラーをアタッチする "RegisterEventHandlers" ヘルパー メソッドを再度呼び出します。リンクされたコード jeffamaphone は役に立ちました。RegisterEventHandlers を条件付きで呼び出す "normalPageLoad" メンバー変数のアイデアを組み込みました。付随するフォーラムの投稿も見ました。ただし、親ウィンドウの Loaded イベントに重点が置かれていることは理解できません。その部分を実行しなくても、コードが機能するようになりました。とにかく、HtmlPageEventManager は完全に機能するようになったと思います。それでもうまくいかないケースを見つけたら、声をかけてください。

于 2009-09-15T03:16:12.197 に答える
0

ページの読み込み中に IE でこれを行うための 100% の解決策はありません。それはあなたのせいではありません。IE のイベント モデルは、非同期コードの巨大なスパゲッティの塊であり、正しく理解するのが非常に困難です。95% の解決策が得られた場合は、喜んで先に進みましょう。

于 2009-09-12T19:37:58.497 に答える