2012-01-09 25 views
5

Tôi đang cố chèn một tệp CSS cục bộ để ghi đè kiểu dáng của trang web. Trang web được hiển thị trong vùng chứa UIWebView trong iOS. Tuy nhiên tôi không thể nhận được mã của tôi để làm việc. Xem đoạn trích của phương thức ủy nhiệm của tôi bên dưới. Mã này chạy (tôi có thể thấy thông báo NSLog) nhưng tôi không thấy kết quả thực thi trên trang.Tiêm CSS vào UIWebView bằng JavaScript

Tôi biết nó không thể là CSS tôi đã viết vì trong trường hợp này tôi lấy các tệp CSS của trang và chỉ cần thay đổi một số màu. (Để kiểm tra phương pháp này)

-(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"); 
} 

Trả lời

9

giải pháp của bạn sẽ không hoạt động vì

  1. cssNode.href của bạn nên là một URL (ví dụ trốn thoát và bắt đầu bằng file://), không phải là một con đường
  2. Safari không cho phép bạn tải các tệp cục bộ từ một trang từ xa, vì nó là một nguy cơ bảo mật.

Trước đây tôi đã thực hiện việc này bằng cách tải xuống HTML bằng cách sử dụng NSURLConnection và sau đó thêm thẻ <style> vào đầu HTML. Một cái gì đó như:

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

này là chính xác những gì tôi cần, cảm ơn nhiều :) – 2cupsOfTech

+0

này không đưa vào tài khoản khả năng – Daniel

+0

cũng, một html có thể thậm chí không có một thẻ đầu – Daniel

Các vấn đề liên quan