Как заставить WebKit WebView использовать таблицу стилей CSS? - PullRequest
6 голосов
/ 24 июня 2011

Я создал html, который ссылается на файл CSS, открываю его в браузерах, и стили отображаются правильно.
Затем я загружаю его в WebView, а стили не отображаются.
Я даже пыталсявставьте <link> в DOM из Objective-C, что является моей конечной целью, но ни одна из них не сработала.
Нужно ли как-то включать CSS в webView?

edit:
CSSвключите в html:
<link rel='StyleSheet' href="file://localhost/Users/petruza/Source/Scrapp/build/Debug/Scrapp.app/Contents/Resources/Scrapp.css" type="text/css" >

CSS, вставленный в DOM: (я проверил, и он вставлен)

NSURL *cssUrl = [[NSBundle mainBundle] URLForResource:@"Scrapp.css" withExtension: nil];

DOMDocument* dom = [[web mainFrame] DOMDocument];

[window setTitleWithRepresentedFilename: lastRunScript];

DOMElement* link = [dom createElement:@"link"];

[link setAttribute:@"rel" value:@"StyleSheet"];
[link setAttribute:@"type" value:@"text/css"];
[link setAttribute:@"href" value: [cssUrl absoluteString]];

DOMElement* head = (DOMElement*) [[dom getElementsByTagName:@"head"] item:0];
DOMElement* headFirstChild = head.firstElementChild;

if( headFirstChild )    
    [head insertBefore:link refChild:(DOMNode *)headFirstChild];    
else
    [head appendChild:(DOMNode *)link];

edit2:
Точно такой же HTMLпоказано в моем WebView и в Safari:
enter image description here

Ответы [ 3 ]

3 голосов
/ 18 апреля 2014

Другой альтернативой может быть использование предпочтения таблицы стилей в WebView:

WebView* webView = /* snip */;
webView.preferences.userStyleSheetEnabled = YES;
webView.preferences.userStyleSheetLocation = [NSURL fileURLWithPath:@"my/stylesheet.css"];

Предполагая, что данные стиля могут быть достигнуты с помощью URL, это, вероятно, самый простой способ сделать это.

3 голосов
/ 24 июня 2011

Вам может понадобиться включить элемент html <base>, чтобы сообщить веб-представлению, где он должен искать файлы CSS.

1 голос
/ 26 июня 2011

Извините, плохо, я загружал WebView со строкой и не предоставлял baseURL:
До:

[[web mainFrame]
 loadHTMLString: output
 baseURL:[NSURL URLWithString:@""]];

После:

[[web mainFrame]
 loadHTMLString: output
 baseURL:[NSURL URLWithString:@"file://localhost/"]];

Это работает сейчас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...