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

问题描述 投票:0回答:3

我有一个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:*”标题,但它仍然无效。

javascript ios cordova phonegap
3个回答
1
投票

面对同样的问题,我认为使用“WKURLSchemeHandler”拦截iOS 11中的url请求将解决它。


0
投票

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

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


0
投票

这可以使用文件插件的PR来解决ios上的混合内容问题:apache / cordova-plugin-file#296固定版本可从以下网站获得:https://github.com/guylando/cordova-plugin-file

如果您在webview上加载远程站点https://example.com,那么它允许使用url访问本地文件:https://example.com/cdvfile/bundle/www/cordova.js而不是cdvfile://localhost/bundle/www/cordova.js这样就解决了混合内容问题

© www.soinside.com 2019 - 2024. All rights reserved.