JavaScript带有哈希/井号(#)的重定向

4

我需要使用JavaScript和jQuery从我的网站打开到其他网站的选项卡(我不能使用<a>标签完成需求)。链接来自数据库,所以我将用户单击的对象的标题设置为该链接,然后在单击时重定向他们。我有能够实现这一点的代码:

<script language="javascript" type="text/javascript">
    var RedirectCount = 0;

    $(document).ready(function () {

        $(".ResultRow").click(function () {
            if ($(this).attr("title") != "") 
            {
                window.open($(this).attr("title"), "Program" + RedirectCount, "");
                RedirectCount = RedirectCount + 1;
            }
        });
    });
</script>

这个方案非常棒,但是许多URL中有#符号,它应该在目标页面上打开一个特定的选项卡。Firefox可以正常工作,但IE 8会在第二个选项卡打开之前删除#标记。我尝试使用JavaScript的内置URLEncode函数,ASP.NET的URLEncode函数和简单地用%20替换#符号来重新编码URL,但都不能正确执行。

我没有其他浏览器的访问权限,而且我已经在谷歌搜索这个问题半个小时了,没有找到答案,所以我想要回答以下两个问题:

  1. 除了window.open或<a target="_blank">标签之外,还有没有打开新选项卡的其他方法,它们总是可以与#一起使用?

  2. 有多少浏览器不能正确执行此操作(特别是Google Chrome)? IE9+中是否修复了此问题?


1
我正在尝试复现,但是这个测试用例在模拟IE8的IE9上对我来说是有效的:http://jsfiddle.net/yugq7/2/. 这也许不是你想要的吗? - pimvdb
我使用IE8,不是在模拟IE8,所以也许这个错误只是模拟中的一个疏忽。很高兴知道这个问题在IE9中不存在。 - Jrud
1
仿真是为了在IE8场景下进行测试,因此它应该具有正常IE8所具有的所有错误。Fiddle对您无效吗? - pimvdb
实际上,我现在看到问题了,它与.NET VS环境有关,当我在测试服务器上运行代码时,重定向正常,但当我以调试模式运行时,它不会将#传递。你的建议确实导致了答案。 - Jrud
1
抱歉挑毛病,但是应该用"%23"代替"#", 而不是"%20"。 - Xyan Ewing
一个好的观点,我不想再去查找它,但当我在http://www.w3schools.com/tags/ref_urlencode.asp上查找时,我使用了%23,但它没有起作用。对于彻底性给予加分。 - Jrud
1个回答

1
解决方案是Visual Studio干扰了IE8运行JavaScript代码的方式,而在正常条件下,问题中列出的代码实际上将正常工作。我不知道为什么,也不觉得弄清楚为什么很重要,也许几年后有人会找到这个答案并在下面的评论中添加它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接