这个标题我不太有把握,但总之我在网上没找到什么好的解决方案。
也许是因为我这边的环境问题吧:
-API 17
-红米1S
今天再写一个局域网环境下、基于HTTP协议的手机控制电脑关机的小程序(建议别这样做,若没有身份验证则相同局域网的人都可以向你的电脑发请求),UI是拟定4个按钮代表不同的指令,html部分代码如下:
<div class="row form-group">
<button id="s" class="btn btn-danger btn-lg col-md-6" onclick="doAction(this);">
<span class="glyphicon glyphicon-off icon"></span>
</button>
<button id="l" class="btn btn-warning btn-lg col-md-6" onclick="doAction(this);">
<span class="glyphicon glyphicon-log-out icon"></span>
</button>
</div>
</pre><p>刚开始打算这样写js:</p><pre class="javascript" name="code"> function doAction(btn){
window.location.href = url;
return false;//防止onclick之后表单提交
}
可是死活不跳转,alert也不出来(后来我才知道是要重写onJsAlert才行),我也一度怀疑是click和touch的区别,可是最后我只能觉得,它不支持这句话。
这是个重定向,或者从另一个角度理解,这是一个GET请求,一说到请求,我马上想到XHR。于是改了代码如下:
function XHR() {
// 参考自 <a target=_blank href="http://www.cnblogs.com/gaojun/archive/2012/08/11/2633891.html">http://www.cnblogs.com/gaojun/archive/2012/08/11/2633891.html</a>
var xhr;
try {xhr = new XMLHttpRequest();}
catch(e) {
var IEXHRVers =["Msxml3.XMLHTTP","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
for (var i=0,len=IEXHRVers.length;i< len;i++) {
try {xhr = new ActiveXObject(IEXHRVers[i]);}
catch(e) {continue;}
}
}
return xhr;
}
function doAction(btn){
var xhr = XHR();
var url = '/ctrl/?op=' + btn.id + '&time=' + document.getElementById('time').value;
xhr.open("get", url, true);
xhr.send(null);
return false;//防止onclick之后表单提交
}
虽然有效果了,但我总觉得有些小题大做。
没办法= =,我总会把问题想复杂,有什么更简便的方法,也欢迎大家提出,共同交流,共同进步。