2012-01-09 37 views
5

我正在嘗試注入本地CSS文件來覆蓋網頁的樣式。該網頁顯示在iOS的UIWebView容器中。但是我無法讓我的代碼工作。請參閱下面我的代理方法的代碼片段。這段代碼運行(我可以看到NSLog消息),但是我看不到它在頁面上執行的結果。使用JavaScript將UI注入到UIWebView中

我知道它不能是我寫的CSS,因爲在這種情況下,我把頁面自己的CSS文件,只是改變了一些顏色。 (爲了測試此方法)

-(void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString *path = [[NSBundle mainBundle] bundlePath]; 
    NSString *cssPath = [path stringByAppendingPathComponent:@"reader.css"]; 
    NSString *js = [NSString stringWithFormat:@"var headID = document.getElementsByTagName('head')[0];var cssNode = document.createElement('link');cssNode.type = 'text/css';cssNode.rel = 'stylesheet';cssNode.href = '%@';cssNode.media = 'screen';headID.appendChild(cssNode);", cssPath]; 
    [webView stringByEvaluatingJavaScriptFromString:js]; 
    NSLog(@"webViewDidFinishLoad Executed"); 
} 

回答

9

您的解決方案將無法工作,因爲

  1. cssNode.href應該是一個URL(即逃了出來,與file://前綴),而不是一個路徑
  2. Safari瀏覽器不允許您從遠程頁面加載本地文件,因爲這是安全風險。

在過去,我通過使用NSURLConnection下載HTML,然後在HTML頭中添加<style>標記來完成此操作。喜歡的東西:

NSString *pathToiOSCss = [[NSBundle mainBundle] pathForResource:@"reader" ofType:@"css"]; 
NSString *iOSCssData = [NSString stringWithContentsOfFile:pathToiOSCss encoding:NSUTF8StringEncoding error:NULL]; 
NSString *extraHeadTags = [NSString stringWithFormat:@"<style>%@</style></head>", iOSCssData]; 
html = [uneditedHtml stringByReplacingOccurrencesOfString:@"</head>" withString:extraHeadTags]; 

[webView loadHTMLString:html baseURL:url]; 
+0

這正是我需要的,非常感謝:) – 2cupsOfTech 2012-06-07 11:02:30

+0

這並沒有考慮到的 – Daniel 2013-01-09 08:28:08

+0

也有這種可能性,一個HTML甚至可能沒有一個頭標記 – Daniel 2013-01-09 08:36:01