1

C# で BHO (Browser Helper Object) を作成しました。これは、Web ページの電話番号を検出し、その横にハイパーリンクを含む画像を配置します。BHO は基本的に、正規表現文字列を使用して電話番号を検索し、その横に画像を追加する JavaScript を挿入します。

これは関連するコードです

public void OnDocumentComplete(object pDisp, ref object URL)
{
        HTMLDocument document = (HTMLDocument)webBrowser.Document;

        IHTMLElement head = (IHTMLElement)((IHTMLElementCollection)
        document.all.tags("head")).item(null, 0);

        IHTMLScriptElement scriptObject =
        (IHTMLScriptElement)document.createElement("script");
        scriptObject.src = "\nhttp://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js";
        ((HTMLHeadElement)head).appendChild((IHTMLDOMNode)scriptObject);

        IHTMLScriptElement scriptObject2 =
        (IHTMLScriptElement)document.createElement("script");
        scriptObject2.text = "\nwindow.onload = function()"+
                                                "{"+
                                                      "$('body').html( $('body').html().replace(/(\\d\\d\\d\\d\\s\\d\\d\\d\\s\\d\\d\\d)/g,'$1 <a href=\"http://www.somewebsite.com\"><img src=\"image.png\" border=\"0\"></a>') );"
                                                +"}"+
                               "\n\n";
        ((HTMLHeadElement)head).appendChild((IHTMLDOMNode)scriptObject2);
}

電話番号がほとんどない非常に単純なページで、IE の BHO をテストしました。期待どおりに動作します。しかし、Web 上の他のページで BHO をテストすると、次のエラーが表示されます。

Microsoft JScript ランタイム エラー: オブジェクトはこのプロパティまたはメソッドをサポートしていません

また

Microsoft JScript ランタイム エラー: アクセス許可が拒否されました

他のいくつかのページで Microsoft JScript ランタイム エラーが発生します。これは、ページに JavaScript を挿入することが許可されていないということですか? 何が原因でしょうか? これが正しい方法であることを願っています。

4

1 に答える 1

0

読み込んでいるサイトにjQueryを複数回追加したため、エラーがスローされたと思います。OnDocumentComplete メソッド内にブレークポイントを設定しようとしたことがありますか? これを行うと、サイト リクエストごとに OnDocumentComplete イベントが複数回発生することがわかります。

そのため、実際のサイト リクエストに対して OnDocumentComplete イベントが発生するのが初めてかどうかを最初に確認する必要があります。そうであれば、javascript を追加します。そうでなければ、何もしません。

これにより、二重の jQuery インクルードを防ぐ必要があります。

于 2013-02-28T05:35:10.293 に答える