Как загрузить пользовательский CSS в WebKit WebView с помощью PyObjC?

Я хотел бы иметь небольшой браузер, который использует мой собственный CSS. Проблема в том, что CSS не загружается или, я думаю, загружается, но без какого-либо эффекта.

Вот полный код (я не использую конструктор интерфейсов):

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

но мой CSS не влияет на WebView.

Я пробовал разные решения, такие как добавление ссылки в 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)

но в обоих случаях это не работает.

Я не хочу использовать javascript для загрузки CSS.

Может ли кто-нибудь сказать мне, что не так с настройкой пользовательского CSS в моем коде?


person Stanpol    schedule 28.08.2011    source источник


Ответы (1)


Apple неправильно документирует, что setUserStyleSheetLocation может быть только локальным путем или данными: URL. Qt объясняет это в своей документации соответствующей настройки в QtWebKit:

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

Указывает расположение пользовательской таблицы стилей для загрузки с каждой веб-страницей.

Местоположение должно быть либо путем в локальной файловой системе, либо URL-адресом данных с данными в кодировке UTF-8 и Base64, например:

"данные: текст/css; набор символов = utf-8; base64, cCB7IGJhY2tncm91bmQtY29sb3I6IHJlZCB9Ow =="

Примечание. Если данные base64 недействительны, стиль не будет применен.

person David K. Hess    schedule 30.11.2011