Flash调用ExternalInterface.call出现JS错误
作者:wbc 日期:2008-11-10
在AxWebbrowser里有一flash,但每当flash执行ExternalInterface.call的时候,AxWebbrowser会提示“物件不支援此属性或方法”,但是实际上call的function已经正常执行,我认认真真检查了几次JavaScript,完全找不到问题,也不应该有问题,因为之前一直是正常的。经过网上一翻搜寻,发现也有人遇到同样的错误提示。有人说是因为10.0的安全性问题,但我试过相关解决办法,无效。的确也怪,之前一直都无问题,我放在虚拟机上测试,flash也是同样版本,并没有出现问题。无办法,由于弹出js错误提示十分骚扰,而且我的程式是完全正确地执行了,于是打算乾脆直接屏蔽js错误。
webbrowser屏蔽js错误可直接打:wb.ScriptErrorsSuppressed = false;
但我用了AxWebbrowser,没有此属性,于是找到
引用内容WebBrowser中的脚本错误处理
当IE浏览器遇到时脚本错误,左下角会出现一个黄色图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框。但是WebBrowser控件则没有这么聪明,它会弹出错误信息框,使得程序显的很不友好,而且会让一些自动执行的程序暂停。虽然WebBrowser提供了ScriptErrorsSuppressed属性,经过尝试,结果是令人遗憾的,通过设置该属性可以解决部分问题,但不能彻底解决。在此探讨两种解决方案:一是通过截获WebBrowser.Document.Window.Error事件,并阻止WebBrowser继续处理错误来解决。如下:
//注册捕获控件的错误的处理事件
this.WebBrowser.Document.Window.Error +=
new HtmlElementErrorEventHandler(Window_Error);
//对错误进行处理
void Window_Error(object sender, HtmlElementErrorEventArgs e)
{
e.Handled = true; // 阻止其他地方继续处理
}
上面的方法可以解决大部分问题,但对于多个框架嵌套等等的情形还是不能很好的解决,于是只能自己动手封装一个MyWebBrowser了,然后用我们自己的MyWebBrowser来替代WebBrowser。如下:
public class MyWebBrowser : System.Windows.Forms.WebBrowser
{
private SHDocVw.IWebBrowser2 Iwb2;
protected override void AttachInterfaces(object nativeActiveXObject)
{
Iwb2 = (SHDocVw.IWebBrowser2) nativeActiveXObject;
Iwb2.Silent = true;
base.AttachInterfaces(nativeActiveXObject);
}
protected override void DetachInterfaces()
{
Iwb2 = null;
base.DetachInterfaces();
}
}
这种方法能能很好的解决问题,其实使用过非托管WebBrowser的朋友肯定看出来了,实际上是通过引用SHDocVw绕过托管代码,直接SHDocVw.IWebBrowser2.Silent = true,最原始的也是最有效的。
虽然一大堆代码,其实直接用最后一个方法:SHDocVw.IWebBrowser2.Silent = true 即可搞定。。
唿。。。。。。。。。。
[本日志由 wbc 于 2008-11-10 09:16 PM 编辑]
文章来自: 本站原创
引用通告地址: http://www.bkkss.com/trackback.asp?tbID=401
日志标签: 编程 flash
文章来自: 本站原创
日志标签: 编程 flash 评论: 0 | 引用: 0 | 查看次数: 525
發表評論
订阅
上一篇
下一篇








