我想在ios应用程序的webview中获取html的代码。当使用UIWebView委托方法在Web视图中加载页面时,我可以获取html代码。在应用程序中,我有一些动态内容,在单击该页面中的按钮(html按钮)后添加。它通过一些javascript或ajax调用完成。但我找不到任何委托方法,以检测Web视图中的操作和更改。任何人都可以建议我获取更新的html页面webview的方法吗?
答案 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);
}
注意:
希望这有帮助!
修改强> 要收听DOM更新,您可以尝试注入以下内容
document.addEventListener("DOMSubtreeModified", function() {
domChanged(););
}, false);
然后听domChanged();像你对ajax请求那样打电话。