UDN-企业互联网技术人气社区

板块导航

浏览  : 3982
回复  : 6

[问答] js如果捕获iframe框架里的脚本错误?

[复制链接]
liner_z的头像 楼主
发表于 2015-7-29 16:25:14 | 显示全部楼层 |阅读模式
要点效果是,在父页面通过脚本来捕获iframe里的脚本错误。
目前还没找到有效方法。只能在iframe自己处理自己的错误。
提供下测试环境,需要两个文件,主页面名称随意,我用test.html,嵌套页面用bad.html,也可以自己修改,但要同时修改test.html里的对应代码。
主页面test.html代码如下:
  1. [*]
  2. [*]
  3. [*]
  4. [*]
  5. [*]test
  6. [*]
  7. [*][b]
  8. [*][i][/i]
  9. [*]
  10. [*][/b]
  11. [*]
  12. [*]
复制代码
代码里已经添加了onerror事件,并return true使其“闭嘴”,但这只能捕获当前页面的错误,嵌套页面里的错误会照样提示出来,IE6会弹出讨厌的窗口,老板很忌讳的。
我的需求就是,在这个test.html里加入代码,用来捕获iframe里的脚本错误并屏蔽。注意,我使用了window.frames[0]来获取iframe的window对象,虽然对象是获取到了,但后面加的onerror处理却无法阻止错误提示。

嵌套iframe页面的代码如下:

  1. [*]
  2. [*]
  3. [*]
  4. [*]test html4's strict
  5. [*]
  6. [*]div{
  7. [*]width:300px;
  8. [*]border:50px #333 solid;
  9. [*]padding:50px;
  10. [*]background-color:#CCCCCC;
  11. [*]}
  12. [*]
  13. [*]
  14. [*][b]
  15. [*]
  16. [*]测试用例
  17. [*]
  18. [*]
  19. [*][/b]
  20. [*]
  21. [*]
复制代码
这个bad.html页面里调用了一个未定义的‘error’,所以会提示错误,如果在这个页面加入onerror处理函数是可以屏蔽,但问题是,如果这个页面不受我们控制,那就不能加入了,所以,只能在上面的主页面test.html里处理了,所以现在就想各位求助了,有什么方法可以做到?

发表于 2015-7-29 16:30:44 | 显示全部楼层

注:window.onerror = function(){return true;};的方式只对当前窗口有效,对内嵌的IFRAME的异常无效。

帮你google了好久,真的找不到。下面的这个页面还有点关系,但貌似是.net开发的。

http://www.cnblogs.com/zhangqingping/archive/2009/06/16/1504260.html
http://topic.csdn.net/u/20081020/10/3e92ba34-c369-4009-ab2e-b910faceb041.html

如果能够修改bad.html里面的内容,那这样可以在IE6下屏蔽错误。但不符合博主的要求啊。

  1. [*]try{
  2. [*]    function test(){
  3. [*]              error;
  4. [*]     }
  5. [*]      test();
  6. [*]}catch(e){
  7. [*]
  8. [*]}
复制代码



使用道具 举报

回复

发表于 2015-7-29 17:42:15 | 显示全部楼层

在主窗口屏蔽子窗口的onerror不太可能。因为子页面加载的时候已经出现错误了,所以后面的onerror不会运行,如果写的onload里面 更会出现这个error错误,唯一的办法在子页面写个onerror事件或者跟楼上一样写try catch
使用道具 举报

回复

发表于 2015-8-12 13:13:52 | 显示全部楼层
无论是不是沙发都得回复下
使用道具 举报

回复

发表于 2015-8-15 11:13:19 | 显示全部楼层
其实js如果遇到web安全类的项目,那就又要做牺牲了,无法读写文件,访问受限。。。哎。。。
使用道具 举报

回复

发表于 2015-8-17 09:33:33 | 显示全部楼层
占坑编辑ing
使用道具 举报

回复

发表于 2017-11-28 11:42:57 | 显示全部楼层
可以试试 在 iframe标签添加security="restricted" sandbox="" 两个属性 前者是IE的禁止js的功能,后者是HTML5的功能。
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部