2010-07-13 9 views
10

मान लें कि मैं कुछ स्थिर HTML पृष्ठों को प्रदर्शित करने के लिए जीटीके में WebKitWebView का उपयोग करना चाहता हूं। ये पृष्ठ एक कस्टम यूआरएल योजना का उपयोग करते हैं, चलो इसे custom:// पर कॉल करें। यह योजना एक स्थानीय फ़ाइल का प्रतिनिधित्व करती है जिसका स्थान एचटीएमएल उत्पन्न होने पर पहले से ज्ञात नहीं है।वेबकिट जीटीके में एक कस्टम यूआरएल योजना कैसे संभालें?

const gchar *uri = webkit_network_request_get_uri(request); 
gchar *scheme = g_uri_parse_scheme(uri); 

if(strcmp(scheme, "custom") == 0) { 
    /* DO FILE LOCATING MAGIC HERE */ 
    webkit_web_view_open(webview, real_location_of_file); 
    return WEBKIT_NAVIGATION_RESPONSE_IGNORE; 
} 
/* etc. */ 

यह ठीक काम करने के लिए जब तक योजना एक <img> टैग में प्रयोग किया जाता है, उदाहरण के लिए लगता है:: <img src="custom://myfile.png">, जाहिरा तौर पर इन नहीं मुझे क्या वेबव्यू की navigation-requested सिग्नल से कनेक्ट है, और ऐसा करने के है navigation-requested सिग्नल के माध्यम से जाओ।

ऐसा लगता है कि वेबकिट के साथ कस्टम यूआरएल योजना के लिए हैंडलर पंजीकृत करने का कोई तरीका होना चाहिए। क्या यह संभव है?

उत्तर

5

मैं वेबकिट के क्रोमियम पोर्ट से अधिक परिचित हूं, लेकिन मेरा मानना ​​है कि आपको छवियों जैसे संसाधनों को संभालने के लिए webkit_web_resource_get_uri (webkitwebresource.h देखें) का उपयोग करने की आवश्यकता हो सकती है।

+3

धन्यवाद, यह सही दिशा है कि मैं जरूरत में सूचक था। पूर्णता के लिए, उत्तर वेबव्यू के 'संसाधन-अनुरोध-प्रारंभिक' सिग्नल से कनेक्ट करना है, और उस हैंडलर के भीतर से 'webkit_web_resource_get_uri() 'के साथ हेरफेर करना है। (ध्यान दें कि यह केवल वेबकिट> = 1.1.14 पर काम करता है।) – ptomato

2

In WebKit GTK 2, there is a more official route for this:

WebKitWebContext *context = webkit_web_context_get_default(); 
webkit_web_context_register_uri_scheme(context, "custom", 
    (WebKitURISchemeRequestCallback)handle_custom, 
    NULL, NULL); 

/* ... */ 

static void 
handle_custom(WebKitURISchemeRequest *request) 
{ 
    /* DO FILE LOCATING MAGIC HERE */ 
    GFile *file = g_file_new_for_path(real_location_of_file); 
    GFileInputStream *stream = g_file_read(file, NULL, NULL); 
    g_object_unref(file); 

    webkit_uri_scheme_request_finish(request, stream, -1, NULL); 
    g_object_unref(stream); 
} 
+0

यह एक बेहतर जवाब है। – clee