【问题标题】:my javascript code runs on pc but doesn't run on android or ios我的 javascript 代码在 pc 上运行,但不在 android 或 ios 上运行
【发布时间】:2012-01-02 16:22:11
【问题描述】:

我正在使用 javascript 使用动态内容更新网页上的某些字段。它适用于所有 PC 浏览器(我使用 Firefox、IE 和 Chrome 进行了测试),但不适用于 Android 手机和 iPhone。手机显示静态内容,但不显示 javascript 写入的值。

会不会和HTTP GET的回复信息格式有关?我没有在回复消息中包含 HTTP 标头,只是原始数据。

我的js代码如下:

function get_datetime() {
    var GetReq = false;
    var hourText = document.getElementById("hour");
    var minuteText = document.getElementById("minute");
    var dayText = document.getElementById("day");
    var monthText = document.getElementById("month");
    var yearText = document.getElementById("year");

    function GetValComplete() {
        if (GetReq.readyState == 4) {
            if (GetReq.status == 200) {
                var time = GetReq.responseText.split(";");
                hourText.value = time[0];
                minuteText.value = time[1];
                dayText.value = time[2];
                monthText.value = time[3];
                yearText.value = time[4];
            }
        }
    }
    if (window.XMLHttpRequest) {
        GetReq = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        GetReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (GetReq) {
        GetReq.open("GET", "/datetime?id=" + Math.random(), true);
        GetReq.onreadystatechange = GetValComplete;
        GetReq.send(null);
        return true;
    }
    return false;
}

我的html代码是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0     Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9" />
<title>date-time</title>
<script type="text/javascript" src="datetime.js"></script>

<style type="text/css">
.auto-style3 {
border: 1px solid #000000;
width: 100px;
}
</style>
</head>
<body onload="get_datetime();">
<br />
<h2><strong>date-time settings:</strong></h2>
<h2><strong></strong></h2>
<br />
<form id="form5" name="form5" method="post" action="">
<p><label for="hour">Hour</label>
<input name="hour" id="hour" class="auto-style3" type="text" /><label     for="minute">Minute</label>
<input name="minute" id="minute" class="auto-style3" type="text" /></p>
</form>
<br />
<form id="form6" name="form6" method="post" action="">
<label for="day">Day</label>
<input name="day" class="auto-style3" id="day" type="text" /><label     for="month">Month</label>
<input name="month" class="auto-style3" id="month" type="text" /><label     for="year">Year</label>
<input name="year" class="auto-style3" id="year" type="text" /></form>
<br />
</body></html>

【问题讨论】:

  • 该代码在 iPhone 上运行良好(使用 &lt;input type=text ...&gt;onLoad='get_datetime();'),所以我怀疑问题出在您调用它的方式或您的 HTML ...您可能想要提供细节...
  • 也许将跨浏览器的障碍委托给 jQuery 可以解决您的问题。
  • 使用开发者控制台查看问题所在。

标签: javascript android html ios


【解决方案1】:

这是缺少的 HTTP 标头。携带动态内容的 HTTP 响应没有任何 HTTP 标头。现在我手动添加了标题(我必须手动添加它,因为它是一个定制的系统)并且它起作用了。

缺少的标头在 PC 浏览器上无关紧要,但显然不被 Android / iOS 接受。

【讨论】:

    【解决方案2】:

    我看到您使用的是特殊字符集,这可能是问题吗?

    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9" />
    

    没有理由关闭 - 尝试将其取出。像这样:

    function get_datetime() {
        var GetReq = false;
    
        function GetValComplete() {
            if (GetReq.readyState == 4) {
                if (GetReq.status == 200) {
                    var time = GetReq.responseText.split(";");
    
                    var hourText = document.getElementById("hour");
                    var minuteText = document.getElementById("minute");
                    var dayText = document.getElementById("day");
                    var monthText = document.getElementById("month");
                    var yearText = document.getElementById("year");
    
                    hourText.value = time[0];
                    minuteText.value = time[1];
                    dayText.value = time[2];
                    monthText.value = time[3];
                    yearText.value = time[4];
                }
            }
        }
        if (window.XMLHttpRequest) {
            GetReq = new XMLHttpRequest();
        }
        else if (window.ActiveXObject) {
            GetReq = new ActiveXObject("Microsoft.XMLHTTP");
        }
        if (GetReq) {
            GetReq.open("GET", "/datetime?id=" + Math.random(), true);
            GetReq.onreadystatechange = GetValComplete;
            GetReq.send(null);
            return true;
        }
        return false;
    }
    

    【讨论】:

    • 这不是问题的原因,因为在我的某些页面上,我一开始没有变量定义,而且无论如何它都不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2014-03-02
    • 2023-02-10
    相关资源
    最近更新 更多