最好的办法是下载一个外部网页,用js和css修改,然后在视图中加载

Best way to download an external webpage, modify it with js and css, then load it in the view

技术: iOS8, SWIFT, XCode 6

使用swift,保存外部网站的html/css/js最好的方法是什么,用我自己的css / js修改保存的数据,然后在视图中加载它.这样,外部页面加载了我的自定义 styles/js 已经实现。

我不确定你对 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 警报作为概念证明。