关于Android WebView不支持window.location.href的解决方法

本文介绍了一个基于局域网环境、使用HTTP协议的手机控制电脑关机的小程序实现,并针对原有代码存在的问题进行改进。通过HTML、JS和XHR技术,实现了四个按钮对应不同指令的功能。同时讨论了跳转问题以及GET请求的处理,最终通过XHR解决了跳转失败的问题,尽管作者认为可能还有更简便的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




这个标题我不太有把握,但总之我在网上没找到什么好的解决方案。


也许是因为我这边的环境问题吧:

-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之后表单提交
	}

虽然有效果了,但我总觉得有些小题大做。

没办法= =,我总会把问题想复杂,有什么更简便的方法,也欢迎大家提出,共同交流,共同进步。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值