繁体   English   中英

如何在Cordova / Phonegap中的远程html文件中包含本地脚本?

[英]How to include a local script in remote html file in Cordova / Phonegap?

我有一个iOS Cordova / Phonegap项目,可从互联网加载html页面。 如果我上传cordova.js,然后所有插件都在html页面中包含cordova.js,则此方法有效。 但是,由于文件已经在应用程序中,因此让人们全部下载它们似乎是一种浪费。 我正在尝试将本地文件包含在远程html中,但似乎没有加载。 我怎样才能做到这一点?

我在www中有一个本地脚本test.js

alert("test");

我正在走向它

[[NSBundle mainBundle] pathForResource:@"test" ofType:@"js" inDirectory:@"www"];

看起来像

/var/containers/Bundle/Application/E31EA51E-7ED0-4D30-90FC-57ACBF3B3DA5/MyApp.app/www/test.js

我将文件包含在远程html中

<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline' 'unsafe-eval' gap://ready file: data:">
<script src="file:///var/containers/Bundle/Application/E31EA51E-7ED0-4D30-90FC-57ACBF3B3DA5/MyApp.app/www/test.js" type="text/javascript"></script>

但是,脚本永远不会加载。

编辑:我在HTTP页上添加了“ Access-Control-Allow-Origin:*”标题,但仍然无法正常工作。

面对相同的问题,我认为在iOS 11中使用“ WKURLSchemeHandler”拦截您的请求将解决该问题。

如果您使用的是UIWebView,则很容易使用NSURLProtocol子类,该子类可以拦截您的所有网络请求并完成您自己的工作(在您的情况下,接受http://*/test.js并将文件内容返回为响应)。

但是,如果您使用的是WKWebView,则NSURLProtocol将不起作用,并且最新的WKURLSchemeHandler也无法拦截http / https请求。可能的方法是设置嵌入式http服务器。

可以使用PR到文件插件来解决此问题,该插件可以解决ios上的混合内容问题:apache / cordova-plugin-file#296固定版本位于: https : //github.com/guylando/cordova-plugin-文件

如果在Web视图上加载远程站点https://example.com ,则它允许使用以下URL访问本地文件: https ://example.com/cdvfile/bundle/www/cordova.js而不是cdvfile:// localhost / bundle / www / cordova.js从而解决了混合内容的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM