BHO的Navigate2方法抛出UnauthorizedAccessException异常,百思不解,求能人指点!

问题描述

我用C#写了一个BHO,在SetSite()中获取IE浏览器的WebBrowser对象,通过其BeforeNavigate2事件截获浏览器提交的请求,将其Cancel掉,修改后再发出,在大部分网站上工作正常,但是访问个别页面内的frame时会抛出UnauthorizedAccessException异常(拒绝访问。异常来自HRESULT:0x80070005E_ACCESSDENIED),百思不解,不知有没有能人能帮忙,谢谢!核心代码(代码里其实未对截获的数据作任何修改,只是原样转发出去,可是就会抛出异常):publicvoidOnBeforeNavigate2(objectpDisp,refobjectURL,refobjectFlags,refobjectTargetFrameName,refobjectPostData,refobjectHeaders,refboolCancel){if(pDispisWebBrowser){Cancel=true;(pDispasWebBrowser).Stop();webBrowser.BeforeNavigate2-=newDWebBrowserEvents2_BeforeNavigate2EventHandler(this.test);objectnullTargetFrameName=null;try{(pDispasWebBrowser).Navigate2(refURL,refFlags,refnullTargetFrameName,refPostData,refHeaders);//用pDisp提交时抛出UnauthorizedAccessException}catch(UnauthorizedAccessExceptionex){Cancel=false;}}//ifpDispisWebBrowser}

如果访问parent.htm,其中有个frame,内容是child.htm,顺序应该是OnBeforeNavigate2先截获访问parent.htm的请求,用Navigate2重发,再截获child.htm,再Navigate2重发,这时就可能抛出异常。举个例子,访问http://bank.ecitic.com/about/,其中有个iframe,就会抛出异常。MSDN上只看到说跨域的时候会抛这个异常,但我这个没有跨域,如果把URL随便改成另一个域的,反倒不抛异常了。。。百思不解,卡了好多天了,求能人帮忙!!

解决方案

解决方案二:
就是跨域访问了
解决方案三:
该回复于2011-11-28 09:22:24被版主删除
解决方案四:
引用1楼sandy945的回复:

就是跨域访问了

还是以http://bank.ecitic.com/about/为例,里面有个iframe:<iframeframeborder="0"scrolling="no"src="../side/banknews.html"height="80"width="100%"allowTransparency="true"></iframe>,这个不应该算跨域吧。而且,如果在代码里截获这个iframe的访问请求,把URL改成http://www.baidu.com之类的地址再提交,反倒不抛异常了。
解决方案五:
该回复于2011-11-28 09:47:39被版主删除
解决方案六:
iframe请求的时候是全路径么?还是直接用的它的src属性请求的
解决方案七:
引用5楼sandy945的回复:

iframe请求的时候是全路径么?还是直接用的它的src属性请求的

是全路径。虽然iframe的src属性是相对路径,但OnBeforeNavigate2中截获的URL已经被浏览器转成绝对路径了,我再重发的时候也沿用的这个URL。
解决方案八:
你单独请求那个iframe的地址有问题么
解决方案九:
引用7楼sandy945的回复:

你单独请求那个iframe的地址有问题么

用一个单独的WebBrowser对象请求当然没问题了,但是要把请求的内容放在frame里。所以用了(pDispasWebBrowser).Navigate2(refURL,refFlags,refnullTargetFrameName,refPostData,refHeaders)的方式,我理解pDisp是这个frame的WebBrowser对象,所以用它来请求,并且把TargetFrameName改成空,放在这个frame自身里,在处理别的frame时都没问题,只某些frame不行。还用过另外一种方法,在SetSite()中获取IE浏览器的顶层WebBrowser对象,用它提交,并且指定TargetFrameName,但运行结果是每个frame都显示在不同的标签页里了。
解决方案十:
自己顶求指点

时间: 2024-09-12 17:02:51

BHO的Navigate2方法抛出UnauthorizedAccessException异常,百思不解,求能人指点!的相关文章

HibernateTemplate类里面的flush方法抛出了异常,异常处理

问题描述 图1图2图1中,HibernateTemplate类里面的flush方法抛出了异常,图2中,调用它的时候却不会抛出异常各位大神,请问下这是做了什么处理啊? 解决方案 解决方案二:异常分为两种:一种是检查式异常就是我们写程序时必须try,catch,比如IOException另一种就是运行时异常,是可以不捕获的比如NullPonterException而DataAccessException就是RuntimeExcption的子类,也就是运行时异常!解决方案三:图2中调用的就是图1的fl

【Java】ArrayList 的 toArray() 方法抛出 ClassCastException 异常

第一次用这个方法,结果冒出个莫名其妙的异常来: String[] names = (String[]) mTags.toArray(); 结果会抛出 java.lang.ClassCastException 异常信息 网上谷歌了一下,发现这个 toArray 的正确用法应该是这样子才对: Object[] names = list.toArray(); for (int i = 0; i < names.length; i++) { String name = (String) names[i]

求问如何捕获async方法中抛出的异常?

问题描述 privateasyncvoidbutton1_Click(objectsender,EventArgse){try{awaitDoSomethingAsync();}catch(Exceptionex){MessageBox.Show(ex.Message);}}privateasyncTaskDoSomethingAsync(){awaitTask.Run(()=>{Thread.Sleep(3000);thrownewException("Test");});}

子类方法返回类型必须和父类相同,抛出的异常声明可以小于或等于父类

Overload译为重载:Override译为重写或者覆盖:  Overload讨论: Java中同一个类不可以有两个相同的方法(方法名.参数类型.参数个数和参数位置都  相同).但可以有方法名相同,参数不同(参数类型.参数个数和参数位置不相同)的方法.这  种相同的方法名,参数不同的方法称为重载. public class Test { public void fn(String name) {} public void fn(int age) {} public void fn(String

java-JavaCompiler中run方法运行时抛出NullPointerException异常

问题描述 JavaCompiler中run方法运行时抛出NullPointerException异常 解决方案 解决方案二: 解决方案三: 参考:http://blog.csdn.net/liu578182160/article/details/25103905

jsp 不能抛出checked异常时 处理方法

因此必须预先处理异常,另外,可以将异常转换为运行时异常,或者绕过它而不处理它.但是,应该这样做吗,这其中是否隐藏着错误? 问题 只要看一个例子,问题就清楚了.假设有一个File对象的List,需要按它们的标准路径以字典顺序排序.所谓标准路径,是指在解析别名.符号链接和/../及/./之后得到的完整绝对路径.本地方法使用一个比较器,如清单1所示: 1.清单1.按标准路径比较两个文件 2.importjava.io.File; 3.importjava.io.IOException; 4.impor

SRVE0068E: 未捕获到 servlet CXFServlet 的其中一个服务方法中抛出的异常。抛出的异常:java.lang.IncompatibleClassChangeError

问题描述 RT.[08-10-2516:37:40:421CST]00000030ServletWrappeESRVE0068E:未捕获到servletCXFServlet的其中一个服务方法中抛出的异常.抛出的异常:java.lang.IncompatibleClassChangeErroratorg.apache.cxf.wsdl11.ServiceWSDLBuilder.addExtensibiltyElements(ServiceWSDLBuilder.java:227)atorg.apa

缺省构造函数不能处理隐式超构造函数抛出的异常类型 IOException。必须定义显式构造函数

问题描述 缺省构造函数不能处理隐式超构造函数抛出的异常类型 IOException.必须定义显式构造函数 int lastnum = getNum(source.getProperty(""fileName"")); public static int getNum(String Filename) throws IOException { InputStream myxls; myxls = new FileInputStream(Filename); sr =

Jetty超时过期,checkIdleTimeout方法抛出的

问题描述 Jetty超时过期,checkIdleTimeout方法抛出的 各位:求助~ 我在用jetty+cometd做comet服务,continuation机制已经加入,但是日志中出现了这样的异常 java.util.concurrent.TimeoutException: Idle timeout expired: 40002/40000 ms at org.eclipse.jetty.io.IdleTimeout.checkIdleTimeout(IdleTimeout.java:153