簡體   English   中英

UIWebView:鏈接到捆綁軟件中的文件並設置baseURL

[英]UIWebView: Link to files in bundle and set a baseURL

我想將一些.js文件包含到HTML文件中,並將其加載到UIWebView 這些文件在我的app bundle 我也想為webView設置一個不同的baseURL

到目前為止,我正在使用以下內容:

HTML檔案:

... a bunch more html code above
<head>
<script src="%wJQ%" type="text/javascript"></script> 
</head>
... a bunch more html code below

加載我的UIWebView文件:

NSString *jQ = [[[NSBundle mainBundle] URLForResource:@"myjsfile" withExtension:@"js"] absoluteString];
htmlString = [htmlString stringByReplacingOccurrencesOfString:@"%wJQ%" withString:jQ];

這給了我類似的東西:

<script src="file://localhost/Users/webmaster/Library/Application%20Support/iPhone%20Simulator/5.1/Applications/43C9E1C2-C7FD-4FC1-BF6A-844266920CCD/MyApp.app/myjsfile.js" type="text/javascript"></script>

可悲的是,當我查看UIWebView ,似乎沒有加載.js文件。

然后,我想將baseURL設置為遠程URL,因為我需要一些相對鏈接才能工作:

NSString *webURL = @"http://www.mysite.com";
[self.webView loadHTMLString:htmlString baseURL:[NSURL URLWithString:webURL]];

我如何才能使這兩種技術正常工作?

如果由於必須將基本url設置為其他內容而無法訪問javascript文件,則可以改為注入javascript文件。

注入js的位置將取決於它的作用以及與dom的交互方式。 如果它獨立於dom,則可以將其注入到viewDidLoad中,如果它依賴於dom,則需要將其注入到shouldStartLoadWithRequest或webViewDidFinishLoad中。 像這樣注入它:

    NSBundle *bundle = [NSBundle mainBundle];
    NSURL *jsURL = [bundle URLForResource:@"JavaScript" withExtension:@"js"];  
    NSData *jsData = [NSData dataWithContentsOfURL:jsURL];
    NSString *jsScriptAsString = [[NSMutableString alloc] initWithData:jsData encoding:NSUTF8StringEncoding];
    [self.webView stringByEvaluatingJavaScriptFromString:jsScriptAsString];

將您的js文件更改為此:

var script = document.createElement('script');  
script.type = 'text/javascript';  
script.text = your stuff
...
document.getElementsByTagName('head')[0].appendChild(script);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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