javascript - 一些网站不接受将 javascript 注入(inject)到 webview 中

标签 javascript swift webkit

我正在向 webviewkit 注入(inject) java 脚本,让用户在长按时从网站检索图像,所以我的问题是一些网站没有响应 javascript 注入(inject),但大多数网站都响应完美。我希望你们中的一个人也遇到过同样的问题。任何帮助表示赞赏。谢谢 ! 这是我的代码:

 private func initializeWebView() {
    webView.navigationDelegate = self

    let newJavascript = "window.onload = function() {
        if (document.addEventListener){
        document.addEventListener("click", function(evt) {
            var tagClicked = document.elementFromPoint(evt.pageX - window.pageXOffset, evt.pageY - window.pageYOffset);
            window.webkit.messageHandlers.jsMessenger.postMessage(tagClicked.outerHTML.toString());
        });
        }
    else if (document.attachEvent){

            document.attachEvent("onclick", function(evt) {
            var tagClicked = document.elementFromPoint(evt.pageX - window.pageXOffset, evt.pageY - window.pageYOffset);
            window.webkit.messageHandlers.jsMessenger.postMessage(tagClicked.innerHTML.toString());
        });

        }
        document.body.style.webkitTouchCallout='none';
        document.body.style.webkitUserSelect='none';
        document.body.style.pointerEvents='auto';

    };"

    window.onload = function() {
        if (document.addEventListener){
        document.addEventListener("click", function(evt) {
            var tagClicked = document.elementFromPoint(evt.pageX - window.pageXOffset, evt.pageY - window.pageYOffset);
            window.webkit.messageHandlers.jsMessenger.postMessage(tagClicked.outerHTML.toString());
        });
        }
    else if (document.attachEvent){

            document.attachEvent("onclick", function(evt) {
            var tagClicked = document.elementFromPoint(evt.pageX - window.pageXOffset, evt.pageY - window.pageYOffset);
            window.webkit.messageHandlers.jsMessenger.postMessage(tagClicked.innerHTML.toString());
        });

        }
        document.body.style.webkitTouchCallout='none';
        document.body.style.webkitUserSelect='none';
        document.body.style.pointerEvents='auto';

    };


    let userScript = WKUserScript.init(source: newJavascript,
                                       injectionTime: .atDocumentEnd , forMainFrameOnly: false)
    webView.configuration.userContentController.addUserScript(userScript)
    webView.configuration.userContentController.add(self, name: "jsMessenger")
    longGesture = UILongPressGestureRecognizer(target: self, action: #selector(WebViewController.longPress(_:)))
    longGesture.minimumPressDuration = 1
    longGesture.delegate = self
   // let clickGesture=UipresG
    self.webView.scrollView.addGestureRecognizer(longGesture)
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(viewTap) )
    tapGesture.delegate = self
    self.webView.scrollView.addGestureRecognizer(tapGesture)
    tapGesture.delegate = self
    webView.addGestureRecognizer(tapGesture)

}
 private func loadData() {
    let request  = URLRequest(url: url)
    webView.load(URLRequest.init(url: url))
}
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    print(message.body)
    let html: String = message.body as! String
    do{
    let doc: Document = try SwiftSoup.parse(html)
        if(html.contains("img")){
    var link: Element = try doc.select("img").first()!

    contentInfo=message.body as! String
            var linkHref: String = try link.attr("src")
            if linkHref.contains("https://www.google.com") {
                linkHref=String(linkHref.dropFirst(22))
                linkHref="http:"+linkHref
            } else {
                linkHref =  String(format: "%@%@", (self.url.absoluteString), linkHref)
            }
            if (linkHref.contains("https://www.google.com")) {
                linkHref=String(linkHref.dropFirst(22))
                if(!linkHref.contains("http")){
                linkHref="http:"+linkHref
                }
            }

    self.itemImgUrl=linkHref
        }
    }catch{
    }
}

最佳答案

我发现了这个问题,在我的脚本“window.onload = function() {”中,有时它没有执行,因此当我删除它时,脚本不会继续执行,所有网站都接受了该脚本。 希望我的回答对某人有所帮助。干杯!

关于javascript - 一些网站不接受将 javascript 注入(inject)到 webview 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56632797/

相关文章:

function - 将可选回调传递给 Swift 函数

css - CSS3 中 calc 操作数的 LESS 转义中的空白保留

JavaScript 单例 : access outer attribute from inner function

javascript - 在不控制读取流的情况下将转换流应用于写入流?

swift - 将 PromiseKit 转换为 Signal 和 SignalProducer

javascript - 使用 WKWebView iOS 加载本地 HTML/Javascript

css - 如何使带有 CSS 的 HTML Slider 留在框中?

android - 尝试从 android 外部构建 webkit

javascript - 相同的类 : Select child but not parent in Jquery

javascript - 在 RxJS Tap 中订阅对于异步逻辑来说是不好的做法吗?