起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5174|回复: 12

[处理中3] 通过iframe内嵌http的包含插件的html5网页出错

[复制链接]

6

主题

30

帖子

483

积分

中级会员

Rank: 3Rank: 3

积分
483
QQ
发表于 2017-12-4 17:28:45 | 显示全部楼层 |阅读模式
本帖最后由 zhm 于 2017-12-4 17:39 编辑

wex5 版本 3.6
打包模式:模式一
安卓7.0

app内的页面通过iframe中内嵌http://xxxx.com/a.html

其中a.html按照模式4打包方法内嵌了cordova的barcodeScanner插件

第一次打开这个包含<script type="text/javascript" src="/cordova.js"></script>页面

会抛出错误:java exception was raised during method invocation.
并且不能调用插件方法

第二次进入就不会抛出错误可以调用插件


--------------------------------------------------------------------

我调整方法,第一次打开的是一个app内的html文件,只包括了<script type="text/javascript" src="/cordova.js"></script>的js代码

然后再跳转到前面的那个a.html

也是可以直接调用插件的

-----------------------------------------------------------


用 window.location.href = ‘http://xxxx.com/a.html’;   可以正常调用

发表于 2017-12-4 18:19:19 | 显示全部楼层
iframe 当然不可以! 相当于里层调用的是iframe 中的window对象!  并不是外层的window对象!所以获取不到corodva 方法的!

你应该想办法获取外层window对象去调用!就可以了!
可以参考
http://docs.wex5.com/wex5-ui-question-list-2012/
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

6

主题

30

帖子

483

积分

中级会员

Rank: 3Rank: 3

积分
483
QQ
 楼主| 发表于 2017-12-4 18:58:26 | 显示全部楼层
liangyongfei 发表于 2017-12-4 18:19
iframe 当然不可以! 相当于里层调用的是iframe 中的window对象!  并不是外层的window对象!所以获取不到c ...

/cordova.js是外层的window对象吗?

不是app的根对象吗?

为什么第二次就可以了?

获取外层window对象会有跨域的问题,更加不可取。

而且我只是获取/cordova.js,不是获取想获取父窗口的对象属性

如果像你所说的这种情况,那我的日志应该有 请求远程服务器的 /cordova.js的404日志

但是我的web日志里没有找到cordova.js的请求日志
回复 支持 反对

使用道具 举报

6

主题

30

帖子

483

积分

中级会员

Rank: 3Rank: 3

积分
483
QQ
 楼主| 发表于 2017-12-4 19:03:22 | 显示全部楼层
本帖最后由 zhm 于 2017-12-5 08:13 编辑

这个错误是cordova.js执行过程中抛出的
出现这个错误说明已经获取cordova.js了..
回复 支持 反对

使用道具 举报

发表于 2017-12-5 10:39:18 | 显示全部楼层
zhm 发表于 2017-12-4 19:03
这个错误是cordova.js执行过程中抛出的
出现这个错误说明已经获取cordova.js了.. ...

你先试试获取外层行不行吧!
/cordova.js 本来就是在 当前域名 下(服务器配置的那个地址) 这个路径下存在的!

iframe 其实就不是同一个域名了,也不能直接访问引入 /cordova.js 的!
只能想办法通过调用外层window对象上的方法实现!

qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

6

主题

30

帖子

483

积分

中级会员

Rank: 3Rank: 3

积分
483
QQ
 楼主| 发表于 2017-12-5 13:08:33 | 显示全部楼层
本帖最后由 zhm 于 2017-12-5 13:25 编辑
liangyongfei 发表于 2017-12-5 10:39
你先试试获取外层行不行吧!
/cordova.js 本来就是在 当前域名 下(服务器配置的那个地址) 这个路径下存 ...

1.我上面已经说过,内嵌本地的html里包含/cordova.js一样也有这个错误,所以不是域名的问题

2.至于路径不存在,我一直在监测服务器端的日志,没有请求/cordova.js

3.模式4,用window.location.href  和再次进入打开页面 这三种情况,都不会出现这个错误,可以正常调用

4.调用父对象,如果是不同域,会有跨域问题,不能获取父的对象,属性,方法等

回复 支持 反对

使用道具 举报

发表于 2017-12-5 14:12:49 | 显示全部楼层
zhm 发表于 2017-12-5 13:08
1.我上面已经说过,内嵌本地的html里包含/cordova.js一样也有这个错误,所以不是域名的问题

2.至于路径不 ...

/cordova.js 是在APP 本地的! 但是只能在最外层调用!iframe 中的 页面是无法直接调用corodva插件的!

如果存在跨域问题!那就是需要解决跨域问题才行!否则iframe 就无法调用插件了!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

6

主题

30

帖子

483

积分

中级会员

Rank: 3Rank: 3

积分
483
QQ
 楼主| 发表于 2017-12-5 14:45:10 | 显示全部楼层
liangyongfei 发表于 2017-12-5 14:12
/cordova.js 是在APP 本地的! 但是只能在最外层调用!iframe 中的 页面是无法直接调用corodva插件的!

...

那如何解释 iframe  内嵌  本地包含/cordova.js的htm  跳到 远程的的包含/cordova.js的html 就可以打开插件?
回复 支持 反对

使用道具 举报

发表于 2017-12-5 14:57:25 | 显示全部楼层
zhm 发表于 2017-12-5 14:45
那如何解释 iframe  内嵌  本地包含/cordova.js的htm  跳到 远程的的包含/cordova.js的html 就可以打开插 ...

因为是在外层的嘛!
window.location.href  相当于重定向! 这个时候APP的服务器地址就变成重定向的这个地址了! 它的根目录当成就能访问到本地的/cordova.js!

/cordova.js 就在 APP真实重定向 地址根目录上
你可以理解为iframe 跨域的, 所以访问不到/cordova.js   APP 指定的这个地址!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

6

主题

30

帖子

483

积分

中级会员

Rank: 3Rank: 3

积分
483
QQ
 楼主| 发表于 2017-12-5 15:42:21 | 显示全部楼层
本帖最后由 zhm 于 2017-12-5 15:47 编辑
liangyongfei 发表于 2017-12-5 14:57
因为是在外层的嘛!
window.location.href  相当于重定向! 这个时候APP的服务器地址就变成重定向的这 ...

你没有理解我说的
我并没有用window.location.href

我是在脚本里用 iframe.src="http://xxxx.com/a.html" 重新 定向的


而且跨域并不代表不能加载不同域的js和css

回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-24 19:42 , Processed in 0.090768 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表