首页 文章

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

提问于
浏览
0

我有一个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中发生的事情很奇怪 . 首先,浏览器首先将属性中的&LT解释为小于符号 . 这个它的自我并不太奇怪,因为它是一个小于符号的转义字符串 . 奇怪的是,如果它被转义为

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

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

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

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

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

所有IE测试都是在IE 9上完成的

知道处理这个问题的正确方法是什么?

2 回答

  • 0

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

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

    然后将它作为encodedURIcomponent()附加到您的URL

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

    输出:

    https://site.othersite.com/login.aspx?client%3Dcname%26LT%3DP
    
  • 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); 
    }
    

相关问题