IE中window.location.href的奇怪行为

时间:2014-09-19 18:53:48

标签: javascript html internet-explorer

我将一个url存储为无线电输入元素中的值。当用户选择其中一个元素时,它会运行一个函数将它们发送到给定的URL。代码读取元素值属性,然后在将其分配给window.location.href之前在其上运行encodeURI

的Javascript

function go(e){
  window.location.href=encodeURI(e.value);
}

HTML

<input type="radio" onclick="go(this)" name="first" value="https://site.othersite.com/login.aspx?client=cname&LT=P" >

这在Chrome和Firefox中正常运行,但不适用于IE。在IE中发生的事情很奇怪。首先,浏览器首先将属性中的&amp; LT解释为小于符号。这个它的自我并不太奇怪,因为这是一个小于符号的转义字符串。奇怪的是,如果将其转义为

https://site.othersite.com/login.aspx?client=cname&amp;LT=P

然后在页面打印或提醒时正确显示。但是当它传递给window.location.href时,它再次将&amp; LT解释为小于符号。

如果您将属性中的字符串转义为

https://site.othersite.com/login.aspx?client=cname&amp;amp;LT=P

然后它似乎在IE中正常工作但是这会在其他浏览器中产生不正确的结果。

所有IE测试均在IE 9上完成

知道处理这件事的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

尝试将您的值设置为您传递的参数

<input type="radio" onclick="go(this)" name="first" value="client=cname&amp;LT=P" >

然后将其作为encodedURIcomponent()附加到您的网址

window.location.href="https://site.othersite.com/login.aspx?" + encodeURIComponent(e.value);

输出:

https://site.othersite.com/login.aspx?client%3Dcname%26LT%3DP

答案 1 :(得分:0)

你不应该使用encodeURI

您的代码应该是:

function go(elem){
    window.location.href = elem.value; 
}

如果你只是为查询字符串添加一个值,那么你需要使用它。

function go(elem){
    window.location.href = "http://www.example.com/foo/?redirect=" + encodeURIComponent(elem.value); 
}