回答:这就是你的做法,因为我无法让以下任何解决方案发挥作用。基本上,您必须使用 javascript,检查文档是否准备就绪,然后将值返回给目标 c。简单优雅。在目标 C 中,webviewdidfinishload:
NSLog(@"Didload:Check if webview %d loading or loaded", X);
// The JS File
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"UIWebViewSearch" ofType:@"js" inDirectory:@""];
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
NSString *jsString = [[NSMutableString alloc] initWithData:fileData encoding:NSUTF8StringEncoding];
[webView stringByEvaluatingJavaScriptFromString:jsString];
NSString *result1 = [webView stringByEvaluatingJavaScriptFromString:@"uiWebview_ReturnDocStatus()"];
NSLog(@"docread= %@", result1);
int RREsult = [result1 intValue];
if (RREsult == 0) {
NSLog(@"Didload: webview %d not yet loaded", X);
}
else if (RREsult == 1){
NSLog(@"Didload: webView %d loaded", X);
}
然后,在 javascript 中,在我的 UIWebViewSearch.js 文件中:
function uiWebview_ReturnDocStatus() {
alert ("check");
if(document.readyState == 'complete'){
return 1;
}
else {
return 0;
}
}
下面是我的代码。我正在尝试确定我的 Web 视图中是否存在某个元素。我不想使用 document.body 等将整个 html 文本提取到目标 c,因为这会占用太多内存。我想要快点的东西。但以下选项均无效。请帮忙。
NSString *oneString = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('moodlez_documentnotyetloaded').value"];
BOOL test = [webView stringByEvaluatingJavaScriptFromString:@"return !!document.getElementById('moodlez_documentnotyetloaded');"];
编辑1:
这是我的目标 C 代码,后跟 javascript。这段代码在 didfinishload 中。
if (1 ==1 ) {
//doesn't work
NSString *exists = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('moodlez_documentnotyetloaded');"];
NSLog(@"exists value=%d", [exists intValue]);
}
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"UIWebViewSearch" ofType:@"js" inDirectory:@""];
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
NSString *jsString = [[NSMutableString alloc] initWithData:fileData encoding:NSUTF8StringEncoding];
[webView stringByEvaluatingJavaScriptFromString:jsString];
[webView stringByEvaluatingJavaScriptFromString:@"uiWebview_InjectJSToTellIfLoading()"];
.JS 代码:
function uiWebview_InjectJSToTellIfLoading() {
if(document.readyState == 'complete'){
var element = document.createElement('input');
element.setAttribute('type','hidden');
element.setAttribute('id','moodlez_documentloaded');
document.body.appendChild(element);
}
else {
if (1 == 1) {
var element = document.createElement('input');
element.setAttribute('type','hidden');
element.setAttribute('id','moodlez_documentnotyetloaded');
document.body.appendChild(element);
}
} }
编辑2:好的,有两种方法可以解决这个问题。第一种是使用 javascript 从 webview 中获取 html 代码并手动搜索 moodlez 标签。这种方法是不可取的,因为对于大型网页可能需要 1-2 秒,但它确实有效。第二个是创建一个 javascript 函数来检查文档是否准备好,如果是,则修改一个 javascript 变量,然后可以从目标 c 中检查该变量。