我想设置一个适用于桌面的网页,以便它可以在iPhone上的UIWebView上显示.我无法访问页面所源自的Web服务器.我想通过以编程方式更改stylesheet元素的href
属性来实现此目的.
我跟我做了以下几点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];
这不起作用.使用该[webView stringByEvaluatingJavaScriptFromString:]
消息并对backgroundColor
身体进行更改确实有效 - 完成练习以查看我是否正确使用了呼叫.
我吠叫错了树吗?
您可以从本地项目目录加载CSS
NSString *path = [[NSBundle mainBundle] bundlePath]; NSURL *baseURL = [NSURL fileURLWithPath:path]; [webView loadHTMLString:htmlString baseURL:baseURL];
详细信息请访问以下网站:http: //iphoneincubator.com/blog/windows-views/uiwebview-revisited
遗憾的是,UIWebView
它不提供用于拦截和修改加载资源时发出的请求的API .这意味着您尝试的任何方法在某种程度上都是黑客攻击.
我会尝试的第一种方法是:
UIWebViewDelegate
在视图上提供您自己的委托.
当您发现正在发出的CSS请求时,实现-webView:shouldStartLoadWithRequest:navigationType:
并返回NO
.
视图加载完主资源后,用于-stringByEvaluatingJavaScriptFromString:
将JavaScript注入到动态加载/设置要使用的样式表的页面中.
在JavaScript中,我会在文档上创建一个全新的元素/节点,而不是尝试修改现有的元素/节点.