我制作了一个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:
答案 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/"]];
现在有效!