【问题标题】:Url stop loading inbetween on UIWebView and WKWebView. On iOS 11 onlyUrl 在 UIWebView 和 WKWebView 之间停止加载。仅在 iOS 11 上
【发布时间】:2018-05-11 15:07:16
【问题描述】:

我的网址

我的发现

  • 该 URL 与所有 safari 和其他浏览器完美配合。 (包括 iOS 11 移动版 Safari)

  • 该网址适用于除 iOS 11 以外的所有 iOS 版本。

  • 我尝试在 UIWebView 和 WKWebView 上打开 URL,但同样的问题发生在两者上。即 URL 在接近完成时停止加载,并且 然后什么都不会发生。

这是我目前尝试过的

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {

    // Objects
    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        setupWebView()
        loadUrl()
    }

    func setupWebView() {

        let prefs = WKPreferences()
        prefs.javaScriptEnabled = true
        let config = WKWebViewConfiguration()
        config.preferences = prefs

        webView = WKWebView(frame: view.frame, configuration: config)
        webView.navigationDelegate = self
        view.addSubview(webView)
    }

    func loadUrl() {

        webView.navigationDelegate = self
        let url = URL(string: "https://app.educationgalaxy.com/games/ipadgame.html?retries=3&name=blastoff&rocket=3&level=2&score=0&gameTimer=150")!
        var request = URLRequest(url: url)
        request.cachePolicy = .reloadRevalidatingCacheData
        webView.load(request)
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print(webView.url!)

    }

    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {

        print(webView.url!)
    }

    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {

        print("error  - \(error)")
    }

}

感谢您的帮助。

【问题讨论】:

  • 从 iOS 11 开始,如果在非主线程中执行任何 UI 内容(即使您访问 UIApplication),它将无法工作。以下是我得到的错误。 “CoreAnimation:[EAGLContext renderbufferStorage:fromDrawable:] 在隐式事务中从非主线程调用!请注意,如果没有显式 CATransaction 或调用 [CATransaction flush],这可能是不安全的。”
  • 感谢 cmets。如您所见,我正在尝试从主线程加载 URL。我尝试的就像创建了一个应用程序并在 viewDidLoad 中创建了一个 WKwbview 并请求加载 URL。 URL 已开始加载,但在加载过程中停止。这只发生在 ios 11 上,每个其他版本都能完美加载 URL。
  • 你找到解决办法了吗?

标签: ios iphone swift uiwebview ios11


【解决方案1】:

//添加plist文件

<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
    <key>google.com</key>
    <dict>
        <key>NSExceptionAllowsInsecureHTTPLoads</key>
        <true/>
        <key>NSIncludesSubdomains</key>
        <true/>
    </dict>
</dict>

 if WKWebView don't not support then declare .m file below code:



#import <WebKit/WebKit.h>

@interface WebScannerViewController()
{

 WKWebView *webView;

}

@结束

@implementation WebScannerViewController - (void)viewDidLoad {

[super viewDidLoad];
webView.hidden=YES;

webView.UIDelegate = self;
webView.navigationDelegate = self;
self.loadingSign.hidden = NO;


    webView.frame=CGRectMake(0, 94, Width, Height-128);
    webView = [[WKWebView alloc] initWithFrame:self.view.bounds];
     webView.customUserAgent = @"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/601.6.17 (KHTML, like Gecko) Version/9.1.1 Safari/601.6.17";
    webView.navigationDelegate = self;
    NSURL *url = [NSURL URLWithString:@"https://app.educationgalaxy.com/games/ipadgame.html?retries=3&name=blastoff&rocket=3&level=2&score=0&gameTimer=150"];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    [webView loadRequest:urlRequest];

}

【讨论】:

    【解决方案2】:

    我已经分析了你的代码是好的,你需要检查图像格式。当我使用带有图像 url 链接的波纹管代码时工作正常。

    import UIKit
    import WebKit
    
    class ViewController: UIViewController  ,WKNavigationDelegate {
    
    
        var webView: WKWebView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            setupWebView()
            loadUrl()
        }
    
        func setupWebView() {
    
            let prefs = WKPreferences()
            prefs.javaScriptEnabled = true
            let config = WKWebViewConfiguration()
            config.preferences = prefs
    
            webView = WKWebView(frame: view.frame, configuration: config)
            webView.navigationDelegate = self
            view.addSubview(webView)
        }
    
        func loadUrl() {
    
            webView.navigationDelegate = self
           // let url = URL(string: "https://app.educationgalaxy.com/games/ipadgame.html?retries=3&name=blastoff&rocket=3&level=2&score=0&gameTimer=150")!
    
             let url = URL(string: "https://upload.wikimedia.org/wikipedia/commons/2/2d/Snake_River_%285mb%29.jpg")!
    
    
            var request = URLRequest(url: url)
            request.cachePolicy = .reloadRevalidatingCacheData
            webView.load(request)
        }
    
        func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
            print(webView.url!)
    
        }
    
        func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
    
            print(webView.url!)
        }
    
        func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
    
            print("error  - \(error)")
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
    
    }
    

    【讨论】:

    • 谢谢。我不明白,请你解释一下我的情况。
    • 问题不在于每个 URL,我的特定 URL 不适用于 webview。
    • 首先,您必须登录 Web 视图(硬代码)并保持会话,当成功后需要调用相同的 Url,无论您调用什么
    • 我这里使用的 URL 是一个不需要任何身份验证的公共 URL。
    • 我们和同事遇到了同样的问题
    【解决方案3】:

    WkWebview 是最近引入的,而 UIWebView 现已正式弃用。 这是苹果论坛上发布的同一问题的链接。苹果工作人员目前正在解决崩溃问题。 enter link description here

    https://forums.developer.apple.com/thread/90411 还尝试在您的项目中添加 WKWebView.framework。 和运输安全。 希望这些信息对您有所帮助。

    【讨论】:

    • 谢谢。正如你所说,我可以看到其他人也在报告与 WebKit 相关的问题。在我们的例子中,URL 正在加载,我们可以跟踪进度。不幸的是,加载在完成之前停止(我们没有崩溃)。我添加了 webkit.framework 但仍然没有任何变化。我们的网址是 HTTPS,因此即使我允许所有网络访问,ATS 对此也没有任何作用,但问题仍然存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    相关资源
    最近更新 更多