iphone - 将本地 css 注入(inject) UIWebView

标签 iphone ios uiwebview

我正在尝试将本地 css 文件“注入(inject)”到下载的 xhtml 文件中。

我找到了很多关于如何做的例子,但它对我不起作用......

这是我的代码:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *cssPath = [path stringByAppendingPathComponent:@"test.css"]; 

    NSString *js = [NSString stringWithFormat:@"var cssNode = document.createElement('link');"
                "cssNode.type = 'text/css';"
                "cssNode.rel = 'stylesheet';"
                "cssNode.href = '%@';", cssPath];
    js = [NSString stringWithFormat:@"%@document.getElementsByTagName('head')[0].appendChild(cssNode);", js];
    //m_webview is a member 
    [m_webView stringByEvaluatingJavaScriptFromString:js];
}

我在这里做错了什么?

谢谢,

最佳答案

我也遇到了麻烦。

我试图从服务器加载 HTML 文件并使用本地 CSS 文件更改样式。

一开始我用

[webView loadRequest:reqObj];

当它点击 - (void)webViewDidFinishLoad:(UIWebView *)webView 我试图将 CSS 文件作为子项推送到“head”:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *cssPath = [path stringByAppendingPathComponent:@"style.css"]; 

NSString *js = [NSString stringWithFormat:@"var cssChild = document.createElement('link');"
                "cssChild = 'text/css';"
                "cssChild = 'stylesheet';"
                "cssChild = '%@';", cssPath];
js = [NSString stringWithFormat:@"%@ document.getElementsByTagName('head')[0].appendChild(cssChild);", js];
[webView stringByEvaluatingJavaScriptFromString:js];
}

所以...它没有用...

然后我试了

NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];    
[webView loadHTMLString:htmlString baseURL:baseURL];

(我将 HTML 字符串复制到 htmlString 中)然后,在 - (void)webViewDidFinishLoad:(UIWebView *)webView 中,我按照上面的代码注入(inject)了 CSS。它奏效了!

但是...我的 HTML 文件存储在远程服务器上,我没有 HTML 字符串,所以我使用了

NSString* myFile = [NSString stringWithFormat:@"http://blablabla.com/file.html"];
NSString* myFileURLString = [myFile stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSData *myFileData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:myFileURLString]];
NSString* myFileHtml = [[[NSString alloc] initWithData:myFileData encoding:NSASCIIStringEncoding] autorelease];

获取 HTML。现在,我在“myFileHtml”中有了原始 HTML 文本。 我现在用

NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];    
[webView loadHTMLString:myFileHtml baseURL:baseURL];

然后在“webViewDidFinishLoad”中捕获响应,将我的 CSS 文件注入(inject)其中并且它起作用了:)

也许有另一个更优雅的解决方案来解决这个问题,但这就是我想出的……

希望对您有所帮助。

关于iphone - 将本地 css 注入(inject) UIWebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8563038/

相关文章:

ios - 解析 - 如何在 iOS 设备中保存 html 文件

ios - 如何从控制中心 - 音乐中删除应用程序名称?

iphone - 字符已在范围内吗?

ios - FBDialog 照片分享问题

ios - 跨客户端谷歌 OAuth : Get auth code on iOS and access token on server

javascript - IOS 上的 Safari 生成 "ReferenceError: Ca ni n' t 找到变量 :"

ios - Web View 不充当 UIWebView

iphone - 如何将 viewController 放入 UIScrollView 中

iphone - 如何计算距离用户最近的位置?

iPhone OpenGL ES 单 View 还是多 View ?