无论是否打包的wap站,难免有时候想在自己app中打开第三方的页面。
比如: 页面中的外部链接 / 允许用户输入网址并在自己的app打开。
那么,问题来了:
1 . 若打开的该第三方页面正好有h5+相关的操作代码,那么很有可能会造成本地app页面操作逻辑混乱(如:本来想将第三方页面限制在一个webview中,但是第三方又有开新窗口的逻辑?)
2 . 更严重的是,若有恶意第三方,故意将自己编写的获取用户本地信息等敏感内容,或破坏app逻辑的相关h5+代码的页面,诱骗用户打开。 可能后果会很严重!
怎么办?
uniapper (作者)
多谢,
还是自己文档看的不仔细。这样就是写个简单浏览器也没问题了。原来光想着在一个单独WebView实现,现在用父子WebView就解决了
2017-10-02 09:06
DCloud_heavensoft
回复 uniapper:回复 uniapper:为啥要用父子浏览器?给浏览器的那个Webview设个titleNView做返回就好了。我们不再推荐父子Webview模式了
2017-10-02 13:25
uniapper (作者)
@16 是。用nativeobj的view更好。但是,刚刚又发现了个问题:
用nativeobj.view 做了个带地址栏的简易浏览器。把loadURL的webview的plus禁掉了(pluserequire : 'none')。
这样一来,想监听该页面的上下滑动手势事件然后操作地址栏view的移动(类似手机chrome的页面上划,地址栏隐藏),却无法实现了。
也想着通过整个webview上面再画一个透明原生view来监听划动事件,但是又想让webview中的网页相关点击等事件不被阻止。这个方案也实现不了了,因为若要view能监听手势事件则需要view.interceptTouchEvent(true),此时,下面的页面就无法触发相应事件。而,view.interceptTouchEvent(false), 下面页面能正常触发相应事件,但view又无法监听。
所以,最好的办法就是:plus.webview.create()中传入参数,仅允许本地js可以调用plus,而从服务器加载的js(js文件或html中的js代码)禁止调用plus。
2017-10-02 17:02
码农TT
如果那个页面加了<script src="html5plus://ready"></script>,就是写了pluserequire : 'none'也可以调用plus api
2019-06-25 17:16
DCloud_App_Array
回复 码农TT: 页面中script的优先级高于页面的plusrequire:'none'属性。不需要使用plus时不应该添加<script src="html5plus://ready"></script>
2019-06-25 19:56
uniapper (作者)
回复 DCloud_App_Array: 这样搞的话,plusrequire:'none'存在的意义是啥?
本来,使用plusrequire:'none'是防止在应用内打开外部链接时被别有用心的人获取到plus对象,进而对应用造成危害。
假设一个场景:
一个app,允许用户(假设安全起见游客无权)添加外部链接,并且该链接可以在app中开一个webview打开。
本来打开外部链接的新窗口设置了requireplus:'none'目的是防止恶意网站执行获取plus对象执行破坏。但是,这个别有用心的用户自制了一个网页,并在网页中加入了<script src="html5plus://ready"></script>。
那么,是不是相当于 requireplus: 'none'是一把锁,而<script src="html5plus://ready"></script>是开这把锁的钥匙?
恐怖的是,这把钥匙就放在锁的旁边,任何人都能得到。
所以,这把锁有用吗?
2019-12-18 16:54
DCloud_App_Array
回复 uniapper: requireplus参数设计的目的不是禁止调用plus,而是设置不预加载plus。禁止调用plus的功能后续会提供新的参数配置
2019-12-18 20:03