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

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

如何在 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.
cordova https mixed-content
2个回答
1
投票

可能的解决方案:

  1. 将所有网页内容更改为

    http
    。这样就不会出现混合内容。您可以通过在全局
    <content src="http://localhost/index.html" />
    (在项目根目录中)的
    widget
    标记内添加
    config.xml
    来完成此操作。放置它的好位置是在
    <autor>
    标签之后和
    <access origin
    标签之前。

  2. 构建您自己的插件(仅限 Android)。如果您使用 cordova,那么您希望使用 HTML、JavaScript 和 CSS 进行编码。我知道。但是构建一个简单插件的 Java 代码并不那么难以编写。你的插件唯一要做的就是运行这段代码:

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { WebSettings 设置 = ((WebView)this.webView()).getSettings(); settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); }

您将花费更多时间来学习需要实现的界面插件,即复制和粘贴该代码块。

现在...在有人说“正确的做法是使用 HTTPS”之前。

看,如果我们正在寻找解决方案,那是因为我们处于一种你无法预测的情况,这显然与你的经历相矛盾。但这并不会降低其合法性。

我自己的用例

并非所有重要的事情都发生在 Play 商店中。

我们有一个带有自定义 Web 界面的 NAS 服务器,随着我们对功能的新需求,我们正在对其进行编码和发展。

例如,如果您想使用 samba 共享在不连接的情况下上传,我们在

http://192.168.1.61/upload
有一个 http 文件上传页面。而且,在有人说“为什么......”之前,因为您可能从不受信任的机器上传,并且您不想将您的凭据输入到可能记录它们的机器中。上传页面不需要凭据,并将文件放在临时目录中,人们会在决定其最终目的地之前查看它们。

我们还有一个 Cordova 应用程序,可以录制音频并在后台将其上传到 NAS,然后将其转换为文本并将其保存到数据库。

为什么是一个应用程序而不是 NAS 界面中的简单另一个页面?因为将录音作为应用程序实现会更好。因此,该应用程序可以执行 Web 界面所做的许多事情,但在使用移动设备中存在的功能(例如相机、传感器等)时,它具有优势。当 Cordova 访问仅使用标准 Web api 的内容时插件没有帮助,效率较低并且需要更多努力。在某些情况下,根本不可能。

NAS 只能由连接到同一 LAN 的计算机访问。不需要https。安全性在 LAN 隔离中。如果 LAN 受到损害...但这是经过计算的风险。

例如,我第一次尝试获取

http://192.168.1.61/login.php
时,我收到了“混合内容”错误。因为 Cordova index.html 页面是使用 https 加载的,并且我们尝试从 http 获取。

解决方案:使应用程序的index.html页面使用http加载,因此没有混合内容。这是通过在全局

<content src="http://localhost/index.html" />
(在项目根目录中)的小部件标签内添加
config.xml
来实现的。

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

再次强调,不要认为如果某样东西不在商店中,或者不是为大量受众开发的,那么它就不存在或根本不重要。有很多合法的用例。


0
投票

您能解释一下在哪里以及如何使用这个插件吗?我是科尔多瓦新手,想了解这一点。

谢谢

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