我在C#中构建了一个BHO(浏览器助手对象),用于检测网页中的电话号码,并在其旁边放置带有超链接的图像。 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);
}
我在一个非常简单的网页上测试了BHO,电话号码很少。它按预期工作。但是,当我在网上测试BHO与任何其他页面时,我得到以下错误
Microsoft JScript运行时错误:对象不支持此属性或方法
或
Microsoft JScript运行时错误:权限被拒绝
我为其他几个页面收到Microsoft JScript运行时错误。这是否意味着我不允许在页面中插入javascript?可能是什么原因 ?我希望这是正确的方法。
答案 0 :(得分:0)
我认为错误是因为你多次向你加载的网站添加jQuery。您是否曾尝试在OnDocumentComplete方法中设置断点? 如果这样做,您将看到每个站点请求多次触发OnDocumentComplete事件。
因此,您应首先检查是否是第一次针对实际网站请求触发OnDocumentComplete事件。如果是这样,请添加javascript,如果没有,则不执行任何操作。
这应该可以防止双jQuery包含。