使用http而非https运行cordova应用程序webview

jucafojl  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(304)

如何在http://localhost而不是https://localhost上运行cordova应用程序webview?
我一直在使用API级别(targetSdkVersion)30编译我的应用程序,据我所知,我的应用程序在HTTP上内部运行,因为所有对HTTP URL的CORS请求都运行良好。现在,根据Playstore的要求,我使用targetSdkVersion 31,我看到我的应用程序在https上运行,因此webview阻止了对HTTP的CORS请求。

Mixed Content: The page at 'https://localhost/index.html' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://www...com/ajax/get_domain.json.php'. This request has been blocked; the content must be served over HTTPS.
omjgkv6w

omjgkv6w1#

可能的解决办法:
1.将所有Web内容更改为http。这样,就不会有混合内容。您可以通过在全局config.xml(项目根目录中)的widget标记中添加<content src="http://localhost/index.html" />来完成此操作。最好将其放在<autor>标记之后和<access origin标记之前。
1.构建你自己的插件(仅限Android)。如果你使用的是cordova,那么你需要用HTML、JavaScript和CSS编写代码。我知道。但是构建一个简单插件的Java代码并不难写。你的插件唯一需要做的就是运行下面的代码块:
如果(安卓系统版本号SDK_INT〉=安卓系统版本号代码LOLLIPOP){网页设置=((网页视图)此网页视图()). getSettings();设置混合内容模式(网页设置混合内容总是允许);}
您将花费更多的时间来学习需要实现的接口插件,而不是复制和粘贴代码块。
现在...在有人说"正确的做法是使用HTTPS"之前。
听着,如果我们在寻找一个解决方案,是因为我们处在一个你无法预测的情况下,这显然与你的经验相矛盾,但这并不意味着它不合法。

    • 我自己的使用案例**
  • 并非所有重要的事都发生在玩具店 *

我们有一个带有自定义Web界面的NAS服务器,我们正在对该服务器进行编码,并随着对功能的新需求而不断发展。
例如,如果你想上传而不连接使用samba共享我们有一个http文件上传页面在http://192.168.1.61/upload。而且,在有人问"为什么..."之前,因为你可能是从一个不受信任的机器上传,你不想输入你的凭据到一个机器,可能正在记录他们。上传页面不需要凭据,并将文件放在临时目录中,在决定其最终目的地之前,人们将在该临时目录中查看这些文件。
我们也有一个 cordova 应用程序,允许录制音频并在后台上传到NAS,然后将其转换为文本并保存到数据库。
为什么是一个应用程序而不是NAS界面中的另一个简单页面?因为实现音频录制作为一个应用程序更好。所以,应用程序可以做很多事情,网络界面做,但它有优势,当来使用移动设备中存在的东西,如相机,传感器等。访问那些只使用标准的网络API,当 cordova 插件是没有帮助,效率较低,需要更多的努力。在某些情况下,根本不可能。
NAS只能由连接到同一个局域网的机器访问。不需要https。安全性是在局域网隔离中。如果局域网被破坏...但这是一个计算过的风险。
例如,当我第一次尝试获取http://192.168.1.61/login.php时,我得到了"混合内容"错误。因为Cordovaindex. html页面是使用https加载的,而我们试图从http获取。

    • 溶液**:使应用的index.html页面使用http加载,因此没有混合内容。这是通过在全局config.xml(在项目根目录中)的小部件标记内添加<content src="http://localhost/index.html" />实现的。

此应用不在应用商店中,将来也不会出现。它通过手动APK安装加载到设备中。更新/安装时,你必须在每个设备中临时启用"允许来自替代来源的应用"。

    • 同样,不要以为如果某个产品不在商店里,或者不是为大量用户开发的,那么它就不存在,或者根本不重要。有很多合法的用例。**

相关问题