下载外部网页的最佳方式,使用js和css进行修改,然后在视图中加载它

时间:2015-02-12 15:53:50

标签: ios xcode swift uiwebview

技术:iOS8,SWIFT,XCode 6

使用swift,保存外部网站的html / css / js的最佳方法是,用我自己的css / js修改保存的数据,然后将其加载到视图中。这样,外部页面加载了我已经实现的自定义样式/ j。

1 个答案:

答案 0 :(得分:1)

我不确定您对UIWebView的使用有多复杂,但是,我能想到的最快的实现(除了您已经完成的evaluateJS路线):

创建一个属性以确定请求是否已被劫持(由您)。

var hijacked = false

提供UIWebViewDelegate协议方法。

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    //if true it must be our version, reset hijack and allow to load
    if hijacked {
        hijacked = false
        return true
    }
    //original request.  Don't let it load, instead trigger manual loader.
    else {
        hijacked = true
        manuallyLoadPage(request)
        return false
    }
}

然后你只需要一个方法来获取页面,获取文本,操作文本,然后用你的版本加载页面。

func manuallyLoadPage(request: NSURLRequest) {
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(request) {
        (data, response, error) in
        var html = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
        html = html.stringByReplacingOccurrencesOfString("</head>", withString: "<script>alert(\"I added this\")</script></head>", options: NSStringCompareOptions.CaseInsensitiveSearch, range: nil)
        self.webView.loadHTMLString(html, baseURL: response.URL!)
    }
    task.resume()
}

这只是一种快速而肮脏的方法,您可能希望更全面地跟踪哪些请求被劫持请求等等......这只是假设一种奇怪的方法。你可以明显地操纵你想要的html,我只是添加了JS警告作为概念证明。