簡體   English   中英

UIWebView和本地css文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM