如何使WebKit WebView使用CSS样式表?

时间:2011-06-24 18:08:21

标签: css cocoa macos webkit webview

我制作了一个html链接到CSS文件,在浏览器中打开它,并且样式显示正确 然后我将它加载到WebView中,样式不显示 我甚至试图从Objective-C向DOM中插入一个<link>,这是我的最终目标,但都没有奏效。
我是否必须以某种方式在webView上启用CSS?

编辑:
CSS包含在html中:
<link rel='StyleSheet' href="file://localhost/Users/petruza/Source/Scrapp/build/Debug/Scrapp.app/Contents/Resources/Scrapp.css" type="text/css" >

在DOM中插入的CSS :(我检查过它确实插入了)

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:
在我的WebView和Safari中显示的相同的html:
enter image description here

3 个答案:

答案 0 :(得分:3)

您可能需要包含一个html <base>元素来告诉webview它应该在哪里查找css文件。

答案 1 :(得分:3)

另一种方法是使用WebView的用户样式表首选项:

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

假设可以使用URL访问样式数据,这可能是最简单的方法。

答案 2 :(得分:1)

抱歉,我的不好,我用字符串加载WebView而没有提供baseURL:
之前:

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

后:

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

现在有效!