Некоторые твит-ссылки не работают при использовании WKWebView для отображения встроенной временной шкалы Twitter - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь использовать WKWebView для отображения одной встроенной временной шкалы из Twitter.

Почти все ссылки работают после того, как WKWebView успешно загрузил встроенный контент, но ссылка перенаправления для каждого твита, отображаемая на временной шкале, не работает.

Вот ссылка на встроенный твит:

https://publish.twitter.com/?query=%40Google&widget=Timeline

Это встроенная временная шкала твиттера:

< a class="twitter-timeline" href="https://twitter.com/Google?ref_src=twsrc%5Etfw">Tweets by Google< /a> 
< script async src="https://platform.twitter.com/widgets.js" charset="utf-8">< /script>

Если вы прокрутите его вниз и попробуете щелкнуть один из твитов, вы будете вестина текущий твит, но это не сработает, когда вы отображаете с WKWebView.


. Во время теста я пытался использовать ту же встроенную временную шкалу и протестировал на работающем устройстве Android.

Я думаю, что встроенная ссылка в порядке, и должно быть что-то не так с тем, как я реализовал WKWebView, или у самого WKWebView есть проблемы с отображением встроенной временной шкалы Twitter.


Здесьмой код для использования WKWebView для отображения встроенной временной шкалы Twitter:

import UIKit
import WebKit

class ViewController: UIViewController {

    private var mWebView: WKWebView!
    let embeddedTwittContent = "<a class='twitter-timeline' href='https://twitter.com/Google?ref_src=twsrc%5Etfw'>Tweets by Google</a>"
    let scriptValue = "<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>"
    let redirectLink = "https://twitter.com/Smaforetagarna/status/"


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        let preferences = WKPreferences()
        preferences.javaScriptEnabled = true

        let configuration = WKWebViewConfiguration()
        configuration.websiteDataStore =  WKWebsiteDataStore.nonPersistent()
        configuration.preferences = preferences

        self.mWebView = WKWebView(frame: CGRect.zero, configuration: configuration)

        self.mWebView.translatesAutoresizingMaskIntoConstraints = false
        self.mWebView.allowsLinkPreview = true
        self.mWebView.allowsBackForwardNavigationGestures = true
        self.mWebView.navigationDelegate = self
        self.view.addSubview(self.mWebView)

        // Add Constraints
        self.mWebView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 100).isActive = true
        self.mWebView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: 0).isActive = true
        self.mWebView.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: 0).isActive = true
        self.mWebView.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 0).isActive = true

        loadTweetNews()
    }

    func loadTweetNews(){
        let htmlHeader = "<!DOCTYPE html> <html><meta name=\'viewport\' content=\'initial-scale=1.0\'/> <head> \(scriptValue) </head> <body>"
        let htmlFooter = "</body> </html>"
        let orderHtml = htmlHeader + embeddedTwittContent + htmlFooter
        let url: URL = URL(string: "https:")!

        self.mWebView.loadHTMLString(orderHtml, baseURL: url)
    }


}

extension ViewController: WKNavigationDelegate{
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print("page finished load")
    }

    func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {
        print("didReceiveServerRedirectForProvisionalNavigation: \(navigation.debugDescription)")
    }

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

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        if navigationAction.navigationType == .linkActivated  {
            if let url = navigationAction.request.url,
                UIApplication.shared.canOpenURL(url) {
                UIApplication.shared.open(url)
                print(url)
                decisionHandler(.cancel)
            } else {
                decisionHandler(.allow)
            }
        } else {
            decisionHandler(.allow)
        }
    }

}

Если вы запустите этот код, вы сможете нажимать почти все ссылки, но как только вы попытаетесь нажать одну изэти твиты, ничего не произойдет.


Цель развертывания моего проекта 10.0

Моя версия Xcode 10.2.1

Моя версия Swift 4.2

...