PhoneGap 构建和 XMLHttpRequest

Posted

技术标签:

【中文标题】PhoneGap 构建和 XMLHttpRequest【英文标题】:PhoneGap Build and XMLHttpRequest 【发布时间】:2016-01-19 13:36:46 【问题描述】:

作为背景 - 在此之前,我为 ios (Swift) 编写了一些原生应用程序,但这是我使用 PhoneGap 的第一个应用程序。我的目标是运行 android 5.0 的华为 P8 lite。我正在使用 PhoneGap Build。

所以这是我的问题: 我在网络服务器服务器上运行了一些 cgi 脚本。 我可以通过打开一个特定的网站来执行这些脚本。 我写了一个小的 javascript 函数,它向服务器发送一个 HttpRequest。 PhoneGap-Build 用于从我的 html 代码生成应用程序。

问题是,它在我的笔记本电脑上运行良好(通过电缆连接或通过 WIFI),但只要我在手机上尝试(通过 WIFI)它就什么也做不了。 这是我的功能:

function openGate() 
    var xhttp;
    if (window.XMLHttpRequest) 
        xhttp = new XMLHttpRequest();
     else 
        alert("Error");
    
    xhttp.open("GET", "http://172.17.113.100/cgi-bin/main.py?mod=door&op=open", "true");
    xhttp.send(null);

相关的 HTML 文件已加载到我的移动设备上。当按下按钮时调用此函数。以下是相关代码:

<!DOCTYPE html>
<html>
<head>
    <title>Steuerung-Screen</title>
    <scripe src="js/steuerung.js" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="css/steuerung.css" />
</head>
<body>
    <div class="Steuerung">
        <h1>Steuerung</h1>
    </div>
<div class="Control">
    <table>
        <tr>
            <td>
                <button type="button" id="up" onClick="openGate();"> <img src="img/Arrow_Up_nice.png" > </button>
            </td>
        </tr>
     </table>
</div>
</body>

感谢您的宝贵时间和帮助!

【问题讨论】:

你在使用whitelist插件吗? 不,我不这样做,但我会尝试使用它并允许所有域 在您的帖子中回答以下问题。这是您的第一个应用程序吗?您的目标平台及其目标版本是什么?安卓4、5、6? iOS 7、8、9?你在使用CLI, SDK or Build 吗?一旦您回答了帖子中的问题,请在 cmets 中回复,以便我知道您已在帖子中添加了信息。还有更多问题 我已添加所需信息,谢谢您的帮助 谢谢,为了便于阅读,我做了些许重新格式化。您也可以将此详细信息添加到您的帖子中吗?从您的服务器加载的页面 - 其中包含一些 javascript。您发布的代码不清楚,该代码是否来自服务器,加载到移动设备上?是这个顺序吗?那是你正在发生的事情吗?再次,请在您的帖子中回答以下问题,并在评论中跟进 TIA Jesse 【参考方案1】:

@f-丹尼尔, 你有几个常见的错误。

    没有为您的构建设置版本。这具有破坏代码的副作用,并且没有博客文章可以让您知道这一点。尝试通过phonegap-version 为您的构建设置版本。也为您的插件设置版本。

    “不设置版本”的一个副作用是您必须使用whitelist 插件和相关部件。它没有很好的记录。 (我有笔记。见下文。)注意:这可能会立即解决您的问题。

    打开网站套接字时的注意事项。 (注意,这是获取数据的推荐方式。但是,如果 Google 或 Apple 认为您正在编写网站包装器,他们可能会拒绝您的应用程序。(注意:我在下面的链接中直接引用了 Apple。)

修复:

在 #1, 阅读:

config.xml The Basics config.xml Preferences:Multi-Platform config.xml Plugins

在#2, 您需要申请whitelist 系统。从Cordova Tools 5.0.0(2015 年 4 月 21 日)开始需要它。对于Phonegap Build,这意味着从cli-5.1.1(2015 年 6 月 16 日)开始

将此添加到您的config.xml

<plugin name="cordova-plugin-whitelist"      source="npm" spec="1.1.0" />
<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" /> <!-- Required for iOS9 -->

请注意,您的应用现在不安全。保护您的应用由您决定。

将以下内容添加到您的index.html

<meta http-equiv="Content-Security-Policy" 
         content="default-src *; 
                  style-src * 'self' 'unsafe-inline' 'unsafe-eval'; 
                  script-src * 'self' 'unsafe-inline' 'unsafe-eval';">

请注意,您的应用现在不安全。保护您的应用由您决定。

当您准备好确保您的应用安全时,请阅读以下内容:HOW TO apply the Cordova/Phonegap the whitelist system

在#3, 阅读第 5 篇(尤其是第 5 篇的最后一部分,参见 Apple 的引用)Top Mistakes by Developers new to Cordova/Phonegap

现在太累了,无法添加。我会在 12 小时内检查。

【讨论】:

以上是关于PhoneGap 构建和 XMLHttpRequest的主要内容,如果未能解决你的问题,请参考以下文章

PhoneGap 构建和 XMLHttpRequest

不包括 Phonegap 构建插件

无法在 Windows phone 和 iOS 中安装 Phonegap 构建的应用程序

ionic 和 phonegap 构建(3.5.0)不显示自定义启动画面

Phonegap 远程构建

PhoneGap 上 Facebook 登录的哈希键 构建和 PhoneGap 混合应用程序的 OAuth URL Facebook 登录