在 window.open 函数 jQuery 中添加 URL 前缀

Posted

技术标签:

【中文标题】在 window.open 函数 jQuery 中添加 URL 前缀【英文标题】:Prefixing a URL in an window.open function jQuery 【发布时间】:2012-02-15 03:25:56 【问题描述】:

我有这个 html

<a href="#" onclick="window.open('TrackPackage.asp?ID=4', '', 'settings');">Track Your Package »</a>

此站点上的某个人能够为我提供一个脚本,以在 URL 前加上域 http://www.example.com/ 前缀这是脚本:

$(document).ready(function()
$('a[onclick^="window.open(\'TrackPackage.asp"]').attr('onClick', $('a[onclick^="window.open(\'TrackPackage.asp"]').attr('onClick').replace("window.open('", "window.open('http://www.example.com/"));
);

但是,我遇到了一些麻烦: 第一个问题是元素有多个实例。这是一个小提琴:http://jsfiddle.net/VMmZx/ 不是按照预期使用ID=4 签署一个锚,而另一个使用ID=5 签署,而是使用ID=4 签署。 这个想法是,每个 window.open 函数都应该以 http://www.example.com 为前缀,但是 URL 的其余部分应该保持不变......

我遇到的第二个问题是当页面上不存在该元素时,jQuery 的其余部分会失败... 这是另一个小提琴:http://jsfiddle.net/VPf32/&lt;a&gt; 应该获得 foo 类,但由于页面上不存在该元素,因此 jQuery 不会执行。由于 javascript 包含在 ASP.NET 的 HTML 模板中服务器,这会产生很多问题。

我希望我已经清楚了,你可以帮助我。 谢谢。

【问题讨论】:

【参考方案1】:

您可以使用.each() 遍历每个匹配元素并单独更改它们:

$('a[onclick^="window.open(\'TrackPackage.asp"]').each(function(index, element) 
    element = $(element);
    element.attr('onclick', element.attr('onclick').replace(/open\('/, 'open(\'http://www.example.com/'));
);​

但是,我不认为使用带有href#onclick 打开窗口的链接尽可能符合语义。如果可能,请尝试将标记更改为:

<a href="TrackPackage.asp?ID=4" target="_blank">Track Your Package »</a>

现在,如果有人好奇它将把他们带到哪里,当您将鼠标悬停在浏览器上时,它可以在状态栏中显示一些有用的内容。

如果您需要进一步调整行为,请添加一个类并绑定click 事件。当他们单击时,阻止默认操作并像以前一样自行打开窗口。

【讨论】:

这实际上给我带来了其他问题......它无法评估未定义的函数。原来的 jQuery 可以工作...我需要另一个脚本。 很遗憾,HTML 不在我的控制之下。我已经多次听到同样的事情并且很久以前就会这样做......【参考方案2】:

你为什么要像这样内联点击?我只会输出如下链接:

<a href="/path/to/file.html" target="_blank">Link Text</a>

然后:

$('a[target=_blank]').click(function()
   var prefix = 'http://domain.com';
   window.open(prefix + $(this).attr('href'));
);

【讨论】:

很遗憾,HTML 不在我的控制之下。我已经多次听到同样的事情并且很久以前就会这样做...... 啊,只有前端权限的烦恼。 是的......它杀了我。也许有一天,我可以编写自己的软件;)

以上是关于在 window.open 函数 jQuery 中添加 URL 前缀的主要内容,如果未能解决你的问题,请参考以下文章

尝试结合使用 jQuery 的 window.open 函数和 for 循环来遍历数组时出现问题

javascript jquery: window.open如何全屏(类似F11)

jQuery window.open() 不允许在 Chrome 中加载本地资源

双屏扩展展示,如何用JavaScript或jquery或其他控件等,实现window.open新窗口在扩展屏幕显示?谢谢

jquery 打开页面window.location和window.open的区别

jquery如何设置浏览器窗口的尺寸??