2011-08-28 6 views
9

Mi piacerebbe avere un piccolo browser che usa il mio CSS. Il problema è che il CSS non è caricato o, suppongo, carichi ma senza alcun effetto.Come caricare i CSS utente in una WebView WebKit usando PyObjC?

Ecco il codice completo (non uso un Interface Builder):

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() 

Il codice viene eseguito senza errori. Stampa

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

ma non c'è alcun effetto del mio CSS nella WebView.

ho provato diverse soluzioni come l'aggiunta di un link al DOM:

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) 

ma in ogni caso non funziona.

Non voglio usare javascript per caricare CSS.

Qualcuno può dirmi cosa c'è che non va nell'impostazione di CSS utente nel mio codice?

risposta

3

Apple non documenta correttamente che setUserStyleSheetLocation può essere solo un percorso locale o dati: URL. Qt non spiegare questo nella loro documentazione della impostazione corrispondente in QtWebKit:

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

Specifica la posizione di un foglio di stile all'utente di caricare con tutti i web pagina.

La posizione deve essere un percorso del file system locale o un URL dati con dati UTF-8 e Base64 codificati, quali:

"dati: text/css; charset = utf-8; base64, cCB7IGJhY2tncm91bmQtY29sb3I6IHJlZCB9Ow == "

Nota: se i dati di base64 non sono validi, lo stile non verrà applicato.

Problemi correlati