2011-08-28 19 views
9

मैं एक छोटा ब्राउज़र चाहता हूं जो मेरे अपने सीएसएस का उपयोग करता हो। समस्या यह है कि सीएसएस लोड नहीं होता है या, मुझे लगता है, यह लोड होता है लेकिन बिना किसी प्रभाव के।पीओओबीजेसी का उपयोग कर वेबकिट वेबव्यू में उपयोगकर्ता सीएसएस कैसे लोड करें?

import Foundation 
import WebKit 
import AppKit 
import objc 

def main(): 
    app = AppKit.NSApplication.sharedApplication() 
    rect = Foundation.NSMakeRect(100,350,600,800) 
    win = AppKit.NSWindow.alloc() 
    win.initWithContentRect_styleMask_backing_defer_(rect, AppKit.NSTitledWindowMask | AppKit.NSClosableWindowMask | AppKit.NSResizableWindowMask | AppKit.NSMiniaturizableWindowMask, AppKit.NSBackingStoreBuffered, False) 
    win.display() 
    win.orderFrontRegardless() 

    webview = WebKit.WebView.alloc() 
    webview.initWithFrame_(rect) 

    webview.preferences().setUserStyleSheetEnabled_(objc.YES) 
    print webview.preferences().userStyleSheetEnabled() 
    cssurl = Foundation.NSURL.URLWithString_("http://dev.stanpol.ru/user.css") 
    webview.preferences().setUserStyleSheetLocation_(cssurl) 
    print webview.preferences().userStyleSheetLocation() 

    pageurl = Foundation.NSURL.URLWithString_("http://dev.stanpol.ru/index.html") 
    req = Foundation.NSURLRequest.requestWithURL_(pageurl) 
    webview.mainFrame().loadRequest_(req) 

    win.setContentView_(webview) 
    app.run() 

if __name__ == '__main__': 
    main() 

कोड त्रुटियों के बिना चलाता है:

यहाँ पूर्ण कोड (मैं एक अंतरफलक बिल्डर का उपयोग नहीं करते हैं) है। प्रिंट

True 
http://dev.stanpol.ru/user.css 

लेकिन वेबव्यू में मेरे सीएसएस का कोई प्रभाव नहीं है।

मैं डोम का लिंक जोड़ की तरह अलग अलग समाधान की कोशिश की:

pageurl = Foundation.NSURL.URLWithString_("http://dev.stanpol.ru/index.html") 
req = Foundation.NSURLRequest.requestWithURL_(pageurl) 
webview.mainFrame().loadRequest_(req) 

dom = webview.mainFrame().DOMDocument() 
link = dom.createElement_("link") 
link.setAttribute_value_("rel", "StyleSheet") 
link.setAttribute_value_("type", "text/css") 
link.setAttribute_value_("href", "http://dev.stanpol.ru/user.css") 

head = dom.getElementsByTagName_(u"head") 
hf = head.item_(0) 
hf.appendChild_(link) 

लेकिन दोनों ही मामलों में यह काम नहीं करता।

मैं सीएसएस लोड करने के लिए जावास्क्रिप्ट का उपयोग नहीं करना चाहता।

क्या कोई मुझे बता सकता है कि मेरे कोड में उपयोगकर्ता सीएसएस सेट करने में क्या गलत है?

उत्तर

3

ऐप्पल ठीक से दस्तावेज नहीं करता है कि setUserStyleSheetLocation केवल स्थानीय पथ या डेटा हो सकता है: यूआरएल। क्यूटी QtWebKit में संगत सेटिंग के अपने दस्तावेज में इस व्याख्या नहीं करता:

http://doc.qt.nokia.com/latest/qwebsettings.html#setUserStyleSheetUrl

एक उपयोगकर्ता स्टाइलशीट के स्थान हर वेब पृष्ठ के साथ लोड करने के लिए निर्दिष्ट करता है।

स्थान या तो स्थानीय फाइल सिस्टम पर एक पथ, या इस तरह के रूप में UTF-8 और Base64 इनकोडिंग डेटा, के साथ एक डेटा URL होना चाहिए:

"डेटा: पाठ/css; charset = utf-8; बेस 64, सीसीबी 7IGJhY2tncm91bmQtY29sb3I6IHJlZCB9Ow == "

नोट: यदि बेस 64 डेटा मान्य नहीं है, तो शैली लागू नहीं की जाएगी।