![](/img/trans.png)
[英]alternative of URL scheme for launching application in ios from another application?
[英]Sending Data from a UIWebView back to an iOS Application with a custom URL Scheme breaks with Xcode 8/iOS 10
在10之前的iOS版本中,我能够通过在文档上创建iFrame或将document.location.href
设置为Web视图尝试的自定义URL,将加载到UIWebView
的JavaScript / HTML中的信息发送回我的应用程序装载:
<html>
<body><input id="clickMe" type="button" value="clickme" onclick="changeWindow();" /></body>
<script type="text/javascript">
function changeWindow() {
//create temp frame
iFrame = this.createIFrame('onStatusChange://eyJ1c2VyTmFtZSI6IkpBTCIsLCJwcm92aWRlciI6IkVtYWlsIn0=');
//remove the frame now
iFrame.parentNode.removeChild(iFrame);
}
function createIFrame(src) {
var rootElm = document.documentElement;
var newFrameElm = document.createElement('IFRAME');
newFrameElm.setAttribute('src', src);
rootElm.appendChild(newFrameElm);
return newFrameElm;
}
</script>
</html>
然后在客户端上,我只是监听UIWebViewDelegate
回调webView:shouldStartLoadWithRequest:navigationType:
,并检查request.URL.scheme
是否等于我的自定义方案(在本例中为onStatusChange
)。
这是一种流行的JavaScript和iOS应用程序之间的通信方式,如流行的问题,如如何从Javascript调用Objective C方法,并将数据发送回iOS中的Javascript? 。
这适用于在iOS 9和10设备上使用Xcode 7(Objective-C或Swift)构建的任何应用程序。 我遇到了一个问题,即在使用Xcode 8构建的任何应用程序上都没有调用委托方法。就好像Web视图甚至没有尝试加载URL,而后者又不会触发委托回调。
从Xcode 7到8或iOS 9到10的UIWebView
或WebKit是否有任何变化会导致这种情况无效? 令我感到困惑的是,我在Xcode 7中针对iOS 8使用Objective-C构建的生产应用程序可以在iOS 10设备上运行,但使用完全相同代码库的Xcode 8构建的调试版本不起作用。
好吧,长话短说我们在onStatusChange://
上使用特殊的URL方案将Base64编码的数据从Web视图发送回我们的iOS应用程序。 我相信iOS 10上的UIWebView
在尝试加载以一个或多个等号符号结尾的URL时会发出嘎嘎声,并加载about:blank
而不是实际的URL。
由于这在iOS 9上完美运行,我假设这是iOS 10的缺陷并已打开rdar://29035522
。 该雷达的主体提供了一个完整的可重现的问题示例。
我正在阅读Base-N编码RFC以确定是否可以删除数据字符串末尾的padding =
字符,或者是否需要从Web中删除它们并在解码数据之前添加到客户端。
我最终实现的解决方案是逃避Base64编码数据的百分比,并在客户端上取消它。 不是最优雅的解决方案,但可能是最安全的解决方案。
这是因为iOS现在默认阻止http请求。 你必须在info.plist中重新启用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.