UIWebView:链接到包中的文件并设置 baseURL
Posted
技术标签:
【中文标题】UIWebView:链接到包中的文件并设置 baseURL【英文标题】:UIWebView: Link to files in bundle and set a baseURL 【发布时间】:2012-03-29 00:56:24 【问题描述】:我想将一些 .js 文件包含到我加载到我的UIWebView
的 html 文件中。这些文件在我的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]];
我怎样才能让这两种技术一起正常工作?
【问题讨论】:
你正在加载的文件的内容是什么? 如果它只是javascript(即使你称它为htmlString)那么你不能通过加载它来运行它,你需要调用stringByEvaluatingJavaScriptFromString()来执行它。如果它的 JS 嵌入在 html 中,那么我们需要查看它以了解它为什么不起作用。 它只是一个 javascript 文件。但我的包中也有一些 css 文件。但我需要能够将我的UIWebView
的baseURL
设置为域,这就是我尝试这样做的原因。
我不想执行 javascript。我只想将它链接到我的 UIWebView
正在加载的 .html 文件中。
【参考方案1】:
如果由于您必须将基本 url 设置为其他内容而无法访问 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);
【讨论】:
为什么我不能使用捆绑 URL 将路径(在 .html 文件中)设置为我的 javascript 文件? 那你为什么不试试看是否有效。那么如果是这样,每个设备上的捆绑 URL 是否都相同? 是的,我确实尝试过,但没有成功。猜猜我只是希望有人以前知道这一点......以上是关于UIWebView:链接到包中的文件并设置 baseURL的主要内容,如果未能解决你的问题,请参考以下文章