我想在我加载到UIWebView
的HTML文件中包含一些.js文件。这些文件位于我的app bundle
内。我还想为baseURL
设置不同的webView
。
到目前为止,我正在使用以下内容:
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 :(得分:0)
如果无法访问javascript文件,因为你必须将基本网址设置为其他内容,那么也许你可以注入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);