在ios应用程序的webview中获取动态更新的html页面的代码?

时间:2015-09-08 11:34:46

标签: ios webview

我想在ios应用程序的webview中获取html的代码。当使用UIWebView委托方法在Web视图中加载页面时,我可以获取html代码。在应用程序中,我有一些动态内容,在单击该页面中的按钮(html按钮)后添加。它通过一些javascript或ajax调用完成。但我找不到任何委托方法,以检测Web视图中的操作和更改。任何人都可以建议我获取更新的html页面webview的方法吗?

1 个答案:

答案 0 :(得分:0)

不幸的是UIWebView没有为ajax请求提供任何委托。无论如何,我想出了一种如何检测ajax请求何时完成的方法。

在包含ViewController

UIWebView
#import <JavaScriptCore/JavaScriptCore.h>

- (void) webViewDidFinishLoad: (UIWebView*) webView {

    [self injectAjaxListener];
}

-(void)injectAjaxListener {

    NSString *jsString =
    @"var script = document.createElement('script');"
    "script.type = 'text/javascript';"
    "script.text ="
    "$(document).ajaxComplete(function() {ajaxCompleted();});"
    "document.getElementsByTagName('head')[0].appendChild(script);";

    [self listenToAjaxEvents];
}

-(void)listenToAjaxEvents {

    JSContext *_jsContext =  [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    __weak JSContext *jsContext = _jsContext;

   jsContext[@"ajaxCompleted"] = ^(NSString *param1) {

       dispatch_async(dispatch_get_main_queue(), ^{

           [self showHTMLSourceCode];
       });
    };
}

-(void)showHTMLSourceCode {

    NSString *htmlSourceCode = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];    
    NSLog(@"%@",htmlSourceCode);
}

注意:

  • 别忘了链接到JavaScriptCore.framework

Link Java Script Core Framework

  • 仅在您要求的网站使用jQuery
  • 时才有效

希望这有帮助!

修改 要收听DOM更新,您可以尝试注入以下内容

document.addEventListener("DOMSubtreeModified", function() {
    domChanged(););
}, false);

然后听domChanged();像你对ajax请求那样打电话。