[英]UIWebView and local css file
我想設置一個適用於桌面的網頁,以便它可以在iPhone上的UIWebView上顯示。 我無法訪問頁面所源自的Web服務器。 我想通過以編程方式更改<link>
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
委托。 -webView:shouldStartLoadWithRequest:navigationType:
並在發現正在發出的CSS請求時返回NO
。 -stringByEvaluatingJavaScriptFromString:
將JavaScript注入到動態加載/設置要使用的樣式表的頁面中。 在JavaScript中,我將在文檔上創建一個全新的<link>
元素/節點,而不是嘗試修改現有的元素/節點。
SWIFT 3
如果您(像我一樣)只使用html代碼段(不是完整的網頁),則需要在html代碼段的標題中添加本地css文件。
因此我定義了一個這樣的html標題:
let htmlHeader = "<html> \n <head> \n <link href=\"default.css\" rel=\"stylesheet\" type=\"text/css\" /> \n </head> \n <body> \n"
和這樣的頁腳:
let htmlFooter = "</body> \n </html>"
然后找到css的baseURL,如下所示:
let baseURLForCss = Bundle.main.url(forResource: "default", withExtension: "css")
並使用您自己的css加載html代碼段,如下所示:
webView.loadHTMLString(String.init(format: "%@%@&@", htmlHeader, htmlSnippet, htmlFooter), baseURL: baseURLForCss)
如果您選擇找到的元素的索引0,您的代碼應該有效:
NSString *js = @"document.getElementsByTagName('link')[0].setAttribute('href','";
NSString *js2 = [js stringByAppendingString:cssPath];
NSString *finalJS = [js2 stringByAppendingString:@"');"];
[webview stringByEvaluatingJavaScriptFromString:finalJS];
你錯過了[0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.