ios - 在 Facebook 和 Twitter 上共享网页内容不起作用 - WebKit iOS Swift

标签 ios swift webview webkit sharing

我在从我的应用程序中将网页内容共享到 facebook 和 twitter 时遇到问题,该应用程序基于将网页加载到 WebKit 中。在网页中,我有 5 个按钮:Facebook、Twitter、WhatsApp、Viber 和 SMS。除 Facebook 和 Twitter 之外的所有按钮都运行良好。当用户点击 WhatsApp、Viber 和 SMS 时,方法“decidePolicyFor”就会被调用,我可以决定会发生什么。点击 Facebook 和 Twitter 按钮不会产生任何影响。没有结果,也没有错误。

我还尝试将新的 QueriesSchemes 实现到 info.plist 文件中,但没有结果。

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>twitter</string>
    <string>fb</string>
    <string>sms</string>
    <string>viber</string>
    <string>whatsapp</string>
</array>



func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if navigationAction.navigationType == .linkActivated  {
        print("user click")
        if let newURL = navigationAction.request.url,
            let host = newURL.host , !host.hasPrefix("-mywebsite-") && UIApplication.shared.canOpenURL(newURL) && UIApplication.shared.openURL(newURL) {
            print(newURL)
            print("Redirected to browser. No need to open it locally")
            decisionHandler(.cancel)
        } else {
            print("Open it locally")
            let url = navigationAction.request.url?.absoluteString
            let url_elements = url!.components(separatedBy: ":")

            if url_elements[0] == "sms" {
                print("sms")
                openCustomApp(urlScheme: "sms://", additional_info: url_elements[1])
                decisionHandler(.cancel)
            } else if url_elements[0] == "whatsapp"{
                print("whatsapp")
                openCustomApp(urlScheme: "whatsapp://", additional_info: url_elements[1])
                decisionHandler(.cancel)
            } else if url_elements[0] == "viber"{
                print("viber")
                openCustomApp(urlScheme: "viber://", additional_info: url_elements[1])
                decisionHandler(.cancel)
            } else {
                print("unknown")
                decisionHandler(.allow)
            }
        }
    } else {
        print("not a user click")
        decisionHandler(.allow)
    }
}

enter image description here

最佳答案

试试这个,效果很好..

 func webView(_ webView: WKWebView, createWebViewWith configuration:
 WKWebViewConfiguration, for navigationAction: WKNavigationAction,
 windowFeatures: WKWindowFeatures) -> WKWebView? {
        NSLog("Test method call from another class", "")
         if (navigationAction.targetFrame == nil) {
             if #available(iOS 10.0, *) {
                 UIApplication.shared.open(navigationAction.request.url!, options: [:],
 completionHandler: nil)
            } else {
                 UIApplication.shared.openURL(navigationAction.request.url!)
             }
             return nil
         }
         return nil;

     }

关于ios - 在 Facebook 和 Twitter 上共享网页内容不起作用 - WebKit iOS Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47962475/

相关文章:

ios - 尝试在 Swift 3 中保存自定义对象时尝试插入非属性列表对象

ios - 具有通用解码类型的网络调用

javascript - Android webview 不显示带有外部 js 链接的 html

java - 如何将 Angular 2+ 应用程序仅作为 GUI 嵌入到 JavaFX WebView 中?

ios - GPUImage:GPUImageThreeInputFilter 适用于静止图像输入,但不适用于相机输入

ios - iOS 11 中新的 MapKit MarkerAnnotationView 问题

ios - UITableViewCell上CustomCell的点击识别器无法点击

ios - 应用程序运行时将 iPhone 的音量控制转移到应用程序

Android - 显示/隐藏 fragment 留下空白区域

iOS - 带动画的程序化模态转场(例如翻转)