UIWebView和本地css文件

Edw*_*der 17 css iphone cocoa-touch uiwebview

我想设置一个适用于桌面的网页,以便它可以在iPhone上的UIWebView上显示.我无法访问页面所源自的Web服务器.我想通过以编程方式更改stylesheet元素的href属性来实现此目的<link>.

我跟我做了以下几点IBOutlet UIWebView *webView.

NSString *cssPath = [[NSBundle mainBundle] pathForResource:@"MyStyleSheet" 
                                                    ofType:@"css"];
NSString *js = @"document.getElementsByTagName('link').setAttribute('href','";
NSString *js2 = [js stringByAppendingString:cssPath];
NSString *finalJS = [js2 stringByAppendingString:@"');"];

//check element structure
NSString *res = [webView stringByEvaluatingJavaScriptFromString:finalJS]; 
Run Code Online (Sandbox Code Playgroud)

这不起作用.使用该[webView stringByEvaluatingJavaScriptFromString:]消息并对backgroundColor身体进行更改确实有效 - 完成练习以查看我是否正确使用了呼叫.

我吠叫错了树吗?

小智 26

您可以从本地项目目录加载CSS

NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
[webView loadHTMLString:htmlString baseURL:baseURL];
Run Code Online (Sandbox Code Playgroud)

详细信息请访问以下网站:http: //iphoneincubator.com/blog/windows-views/uiwebview-revisited

  • css文件由html标头中的声明加载 - 如下所示:`<link href ="default.css"rel ="stylesheet"type ="text/css"/>`那么你需要设置`baseURL`到可以找到`default.css`文件的目录. (6认同)

And*_*rew 5

遗憾的是,UIWebView它不提供用于拦截和修改加载资源时发出的请求的API .这意味着您尝试的任何方法在某种程度上都是黑客攻击.

我会尝试的第一种方法是:

  • UIWebViewDelegate在视图上提供您自己的委托.
  • 当您发现正在发出的CSS请求时,实现-webView:shouldStartLoadWithRequest:navigationType:并返回NO.
  • 视图加载完主资源后,用于-stringByEvaluatingJavaScriptFromString:将JavaScript注入到动态加载/设置要使用的样式表的页面中.

在JavaScript中,我会<link>在文档上创建一个全新的元素/节点,而不是尝试修改现有的元素/节点.