2011-08-28 18 views
9

Me gustaría tener un pequeño navegador que use mi propio CSS. El problema es que CSS no está cargado o, supongo, se carga pero sin ningún efecto.¿Cómo cargar el CSS del usuario en un WebView WebView usando PyObjC?

Aquí está el código completo (no utilizo una Interfaz del generador):

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

El código se ejecuta sin errores. Imprime

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

pero no hay ningún efecto de mi CSS en el WebView.

He intentado diferentes soluciones como la adición de un enlace con el 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) 

pero en cualquier caso, no funciona.

No quiero usar javascript para cargar CSS.

¿Alguien puede decirme qué hay de malo en configurar el código CSS del usuario en mi código?

Respuesta

3

Apple no documenta correctamente que setUserStyleSheetLocation solo puede ser una ruta local o datos: URL. Qt Cómo explica esto en su documentación de la configuración correspondiente en QtWebKit:

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

especifica la ubicación de una hoja de estilo de usuario para cargar con cada página web .

La ubicación debe ser una ruta de acceso en el sistema de ficheros local, o una URL datos con datos UTF-8 y Base64 codificado, tales como:

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

Nota: Si los datos de base64 no son válidos, el estilo no se aplicará.

Cuestiones relacionadas