Arron
Arron
  • 发布:2014-10-16 00:20
  • 更新:2014-10-16 18:19
  • 阅读:3178

HBuilder app plus 处理错误

分类:HTML5+

我在使用HBuilder开发app的时候遇到一个问题。
一个页面中如果设置一个id为plus的元素就会报错。
例如:<a id="plus"></a>

然后我在chrome调试里面就会看到如下错误:

Uncaught TypeError: Cannot call method '__Webview_LoadEventCallBack' of undefined
(anonymous function)

Uncaught TypeError: Cannot set property 'device' of undefined
(anonymous function)
plus.bridge.exec
r
h.canBack
(anonymous function)/storage/sdcard/Android/data/io.dcloud.HBuilder/.HBuilder/apps/HBuilder/www/views/web.js:35
(anonymous function)/storage/sdcard/Android/data/io.dcloud.HBuilder/.HBuilder/apps/HBuilder/www/views/web.js:56
c.onCallback
(anonymous function)
plus.bridge.callbackFromNative
(anonymous function)

我只在android调试环境下测试了, 正式环境也会报错。
iOS直接导致 appendJSFIle 里面的内容无法执行。由于我的功能是读取网络web页面,页面元素我无法控制。没法儿去掉那个id为plus的元素。报这个错误之后,webview.parent() 就会取不到。 请帮忙测试修正一下,谢谢。

2014-10-16 00:20 负责人:无 分享
已邀请:
DCloud_heavensoft

DCloud_heavensoft

@Array 这个错误有没有规避的方法?

DCloud_heavensoft

DCloud_heavensoft

@Array

情况是这样,在一个webview中 append的subview,这个subview打开了一个外部网页。
http://m.jd.com/product/1035030070.html?resourceType=&resourceValue=&sid=24078c923a6862cb1465ac9f8ef6eccd

可是这个外部网页里面自己定义了plus,这个网页是通过id=plus来定义的,也有可能其他网页是var plus。

总之,plus不再是我们的plus,这导致给这个subview里面 appendJSFile也进不去了。

我们在使用plus api前,需要验证下plus的合法性:是不是我们的定义的,如何准确找到我们的定义的plus?
我想应该有办法,你再试验下。

Arron

Arron (作者)

只要有那个 id=plus 存在,就直接报系统错误:
Uncaught TypeError: Cannot call method '__Webview_LoadEventCallBack' of undefined

然后appendJsFile在iOS下面不执行, 在android能执行, 也能获得plus,以及plus.webview.currentWebview() 但是plus.webview.currentWebview().parent() 等接口没有结果。也就是说和parent view之间的通信断了。

DCloud_App_Array

DCloud_App_Array

确认是有这个问题,原因是html页面会自动把指定id的DOM节点作为window的根对象导致冲突。
暂时的处理方法是不要将DOM节点的id设置为plus,我们会尽快出解决方案修复此问题。

该问题目前已经被锁定, 无法添加新回复