DOM Webkit Objective Cへのアクセス
-
03-07-2019 - |
質問
Webkitに精通している人が、次のコードが機能しない理由について説明したり、正しい方向を教えてくれたりできますか
私がやろうとしているのは、ページをロードし、ウェブキットにそれを解析させ、タイトルを印刷するだけです。
これは私が持っているものです:
#include <iostream>
#include <WebKit/WebKit.h>
using namespace std;
/*
Seek Help
*/
int main (int argc, char * const argv[]) {
NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
WebFrame * mainFrame;
WebView * view = [[WebView alloc] initWithFrame: NSMakeRect (0,0,640,480)];
mainFrame = [view mainFrame];
NSString * url = @"http://test.com";
[[view mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
NSString * data = @"<html><head><title>testing</title></head><body>tester</body></html>";
[[view mainFrame] loadHTMLString:data baseURL: nil];
// NSString * urlString = [[NSString alloc] initWithUTF8String:"<html><head><title>Hello World</title></head><body><p>My first Web page.</p></body></html>"];
//[[view mainFrame] loadHTMLString:urlString baseURL:nil];
NSString * outerHtml = [(DOMHTMLElement *)[[[view mainFrame] DOMDocument] documentElement] innerHTML];
cout << "Html: " << [outerHtml UTF8String] << endl;
NSString * title = [view mainFrameTitle];
cout << "title: " << [title UTF8String] << endl;
[autoreleasepool release];
return 0;
}
出力はhtmlであり、タイトルは空白です
読んでくれてありがとう
解決
WebKitはRunLoopに依存してコンテンツを読み込むため、たとえ静的コンテンツであっても機能しません。
次のような標準の実行ループを追加する必要があります。
while (!done) {
pool = [[NSAutoreleasePool alloc] init];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate distantPast]];
[pool release];
}
そして、WebFrameLoadDelegate( webView.frameLoadDelegate = thatObject
)として設定し、-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame * )frame
コールバックを使用すると、DOMにアクセスできるはずです。また、ロードが完了したら、 done
フラグをYESに設定します。
他のヒント
HTMLを解析するだけの場合は、WebViewの代わりにNSXMLDocumentを使用してください。 URLがロードされるまで、そのinitWithContentsOfURLイニシャライザーはブロックすると考えています。それでもうまくいかない場合は、URLのNSURLRequestを作成してから、[NSURLConnection sendSynchronousRequest:..]を使用してロードし、NSXMLDocumentにフィードしてください。
所属していません StackOverflow