使用URL中的任何位置设置window.location会在IE11中更改为©?

时间:2014-08-04 23:25:49

标签: internet-explorer internet-explorer-11

在IE11中,使用window.locationwindow.location.hrefdocument.location都具有相同的效果。如果您设置的网址中的查询字符串在任何位置包含&copy,则会将其更改为©

有关如何解决此问题的任何想法?

要查看此问题的演示,请将以下文本保存到名为test.html的文件中,然后在IE11中将其打开。 (这个bug也可能影响其他版本;我不知道。)

<!DOCTYPE html5>
<html>
<body>
    <div><a href="#" class="broken">Broken in IE11</a></div>
    <div><a href="#" class="works">Works in IE11</a></div>
    <p>Query string: <pre id="queryString"></pre></p>
    <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
    <script>
        var queryString = (function() {
            if (!window.location.search) {
                return({});   // return empty object
            }
            var parms = {};
            var temp;
            var items = window.location.search.slice(1).split("&");   // remove leading ? and split
            for (var i = 0; i < items.length; i++) {
                temp = items[i].split("=");
                if (temp[0]) {
                    if (temp.length < 2) {
                        temp.push("");
                    }
                    parms[decodeURIComponent(temp[0])] = decodeURIComponent(temp[1]);
                }
            }
            return(parms);
        })();

        $(function() {
            $('#queryString').text(JSON.stringify(queryString));

            $('.broken').on('click', function(e) {
                e.preventDefault();
                window.location = "test.html?q=test&copy=true";
            });
            $('.works').on('click', function(e) {
                e.preventDefault();
                window.location = "test.html?copy=true&q=test";
            });
        });
    </script>
</body>
</html>

1 个答案:

答案 0 :(得分:1)

问题似乎影响所有IE版本,并且没有允许确切URL工作的修复或解决方法;你必须改变网址。

查询字符串中的URL编码名称和值就足够了。修改上面的示例以使用%63opy而不是copy会导致加载正确的网址。

另请参阅:Accidental HTML entities in URLs