2012-03-29 53 views
0

我想將幾個.js文件包含到我加載到我的UIWebView的HTML文件中。這些文件位於我的app bundle之內。我也想爲webView設置不同的baseURLUIWebView:鏈接到文件捆綁並設置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]]; 

我怎樣才能得到這兩種技術正常工作起來呢?

+0

什麼是您所加載的文件的內容? – Gruntcakes 2012-03-29 02:55:37

+0

如果它只是javascript(即使你稱之爲htmlString),那麼你不能通過加載它來運行它,你需要調用stringByEvaluatingJavaScriptFromString()來執行它。如果它的JS嵌入在html中,那麼我們需要看看它爲什麼不能正常工作。 – Gruntcakes 2012-03-29 03:24:32

+0

這只是一個JavaScript文件。但我的捆綁包中也有一些css文件。但我需要能夠將我的'UIWebView'的'baseURL'設置爲一個域,這就是爲什麼我要這樣做。 – 2012-03-29 03:25:00

回答

0

如果javascript文件無法訪問,因爲您必須將基礎url設置爲其他內容,那麼也許可以注入JavaScript文件。

在哪裏注入js將取決於它的作用以及它如何與dom進行交互。如果它獨立於dom,則可以將其注入到viewDidLoad中,如果它依賴於它,則需要將其注入到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); 
+0

爲什麼我不能使用包URL來將路徑(在.html文件內)設置爲我的JavaScript文件? – 2012-03-29 04:45:18

+0

那你爲什麼不試試看看它是否有效。那麼如果它確實會在每個設備上的捆綁url是相同的? – Gruntcakes 2012-03-29 16:02:51

+0

是的,我確實嘗試過,但沒有奏效。猜猜我只是希望以前有人知道這一點...... – 2012-03-30 16:56:57