I want to style a web page meant for the desktop so that it is presentable on a UIWebView on iPhone. I do not have access to the web server from which the pages originate. I would like to do this by changing the href
attribute of the <link>
stylesheet element programmatically.
I do the following with my 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];
This does not work. Using the [webView stringByEvaluatingJavaScriptFromString:]
message and making a change to the backgroundColor
of the body does indeed work - done as an exercise to see if I was using the call correctly.
Am I barking up the wrong tree?
You can load CSS from local project directory
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
[webView loadHTMLString:htmlString baseURL:baseURL];
detail info check this site : http://iphoneincubator.com/blog/windows-views/uiwebview-revisited
Unfortunately UIWebView
doesn't provide an API for intercepting and modifying the requests that it makes while loading a resource. This means that any approach you try will be hack-ish to a certain extent.
The first approach I would try is:
UIWebViewDelegate
delegate on the view.-webView:shouldStartLoadWithRequest:navigationType:
and return NO
when you spot the CSS requests being made.-stringByEvaluatingJavaScriptFromString:
to inject JavaScript into the page that dynamically loads/sets the stylesheet that you want to use.In the JavaScript I would create an entirely new <link>
element/node on the document instead of trying to modify the existing one.
Your code should work, if you choose index 0 of the found elements:
NSString *js = @"document.getElementsByTagName('link')[0].setAttribute('href','";
NSString *js2 = [js stringByAppendingString:cssPath];
NSString *finalJS = [js2 stringByAppendingString:@"');"];
[webview stringByEvaluatingJavaScriptFromString:finalJS];
You missed [0]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With