gpt4 book ai didi

javascript - 使用自定义 URL 方案将数据从 UIWebView 发送回 iOS 应用程序会中断 Xcode 8/iOS 10

转载 作者:可可西里 更新时间:2023-11-01 13:24:56 26 4
gpt4 key购买 nike

在 iOS 10 之前的版本中,我能够通过在文档上创建 iFrame 或设置 document,将信息从加载到 UIWebView 的 JavaScript/HTML 发送回我的应用程序。 location.href 到 Web View 将尝试加载的自定义 URL:

<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 应用程序之间通信的一种流行方式,如 How to invoke Objective C method from Javascript and send back data to Javascript in iOS? 等常见问题所示。 .

这适用于在 iOS 9 和 10 设备上使用 Xcode 7(Objective-C 或 Swift)构建的任何应用程序。我遇到了一个问题,在使用 Xcode 8 构建的任何应用程序上都没有调用委托(delegate)方法。就好像 WebView 甚至没有尝试加载 URL,这反过来又不会触发委托(delegate)回调。

UIWebView 或 WebKit 从 Xcode 7 到 8 或 iOS 9 到 10 是否有任何更改会导致它不起作用?真正让我感到困惑的是,我在 Xcode 7 中使用 Objective-C 构建的针对 iOS 8 的生产应用程序可以在 iOS 10 设备上运行,但是使用完全相同代码库的 Xcode 8 构建的调试构建不起作用。

最佳答案

好吧,长话短说,我们使用特殊的 URL 方案 onStatusChange:// 将 Base64 编码的数据从 Web View 发送回我们的 iOS 应用程序。我相信 iOS 10 上的 UIWebView 在尝试加载以一个或多个等号字符结尾的 URL 时会阻塞,并加载 about:blank 而不是实际的 URL。

由于这在 iOS 9 上完美运行,我假设这是 iOS 10 的缺陷并已打开 rdar://29035522 .该雷达的正文中提供了该问题的完整可重现示例。

我正在通读 Base-N encoding RFC以确定是否可以接受删除数据字符串末尾的填充 = 字符,或者是否需要在解码数据之前将它们从网络中删除并添加到客户端。

我最终实现的解决方案是对 Base64 编码数据进行百分比转义,然后在客户端对其进行取消转义。不是最优雅的解决方案,但可能是最安全的解决方案。

关于javascript - 使用自定义 URL 方案将数据从 UIWebView 发送回 iOS 应用程序会中断 Xcode 8/iOS 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40290336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com