سؤال

هل يمكن لشخص الذي هو على دراية بكت يرجى توضيح أو لي نقطة في الاتجاه الصحيح لماذا التعليمة البرمجية التالية لا تعمل

ما أحاول القيام به هو تحميل الصفحة، وبكت تحليل ذلك وببساطة طباعة العنوان.

وهنا هو ما كنت قد حصلت على:

#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 وعنوان فارغة

وشكرا لقراءة

هل كانت مفيدة؟

المحلول

وأنها لا تعمل بسبب بكت يعتمد على 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، لماذا لا تستخدم NSXMLDocument بدلا من عرض ويب. أعتقد كتل initWithContentsOfURL مهيئ لها حتى يتم تحميل رابط. وإذا لم يفلح ذلك حاول إنشاء NSURLRequest لURL ثم استخدام [NSURLConnection sendSynchronousRequest: ..]. لتحميله ومن ثم تغذية أن لNSXMLDocument

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top