2011-08-28 9 views
9

Chciałbym mieć małą przeglądarkę, która używa mojego własnego CSS. Problem polega na tym, że CSS nie jest załadowany lub, jak sądzę, ładuje się, ale bez żadnego efektu.Jak załadować CSS użytkownika w WebKit WebView przy użyciu PyObjC?

Oto pełny kod (nie używać Builder Interface):

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

Kod działa bez błędów. Drukuje

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

ale nie ma efektu mojego CSS w WebView.

Próbowałem różnych rozwiązań jak dodanie linka do 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) 

ale w każdym razie to nie działa.

Nie chcę używać javascript do ładowania CSS.

Czy ktoś może mi powiedzieć, co jest nie tak z ustawianiem kodu CSS użytkownika w moim kodzie?

Odpowiedz

3

Apple nie dokumentuje poprawnie, że setUserStyleSheetLocation może być tylko lokalną ścieżką lub danymi: URL. Qt nie wyjaśnia to w swojej dokumentacji odpowiedniego ustawienia w QtWebKit:

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

Określa położenie arkusza stylów użytkownika, aby załadować z każdej strony internetowej .

Miejsce musi być droga w lokalnym systemie plików lub URL danych z danymi UTF-8 i BASE64 kodowane, jak:

„Dane: text/css; Charset = UTF-8; base64, cCB7IGJhY2tncm91bmQtY29sb3I6IHJlZCB9Ow == "

Uwaga: Jeśli dane base64 nie są prawidłowe, styl nie zostanie zastosowany.

Powiązane problemy