我需要转换一个rails 2.3站点,以便所有外部URL在新窗口中打开。我可以尽管打电话给link_to
并添加:target => '_blank'
,但我希望一步完成所有链接,现在和将来。有没有办法让猴子补丁link_to得到想要的行为?如何使link_to在新窗口中打开外部URL?
回答
在我这一去年底,在初始化器:
module ExternalLinksInNewTabs
def new_tab_link_to *args, &block
if block_given?
options = args.first || {}
html_options = args[1] || {}
if options.is_a? String
if ExternalLinksInNewTabs.is_external_link? @controller.request.host, options
html_options[:target] = '_BLANK'
end
end
same_tab_link_to options, html_options, &block
else
name = args.first
options = args[1] || {}
html_options = args[2] || {}
if options.is_a? String
if ExternalLinksInNewTabs.is_external_link? @controller.request.host, options
html_options[:target] = '_BLANK'
end
end
same_tab_link_to name, options, html_options
end
end
def self.is_external_link? host, url
host.sub! /^www\./, ''
url =~ /^http/i && url !~ /^http:\/\/(www\.)?#{host}/i
end
end
module ActionView
module Helpers
module UrlHelper
include ExternalLinksInNewTabs
alias_method :same_tab_link_to, :link_to
alias_method :link_to, :new_tab_link_to
end
end
end
在Rails 4中,“@ controller”没有定义,也缺少对https的支持。这里的变化https://gist.github.com/RoxasShadow/b5c59152183ff9ba0757/revisions。谢谢你的摘录顺便说一句。 – 2015-04-02 08:24:57
如果你想添加它每个的link_to到可以ApplicationHelper
添加def link_to(*args, &block)
if block_given?
args = [(args.first || {}), (args.second || {}).merge(:target => '_blank')]
else
args = [(args.first || {}), (args.second || {}), (args.third || {}).merge(:target => '_blank')]
end
super(args, block)
end
或者你可以创建自己的link_to帮助你只需要添加一个帮手,在您的link_to
添加此选项
def link_to_blank(*args, &block)
if block_given?
args = [(args.first || {}), (args.second || {}).merge(:target => '_blank')]
else
args = [(args.first || {}), (args.second || {}), (args.third || {}).merge(:target => '_blank')]
end
link_to(args, block)
end
你不应该为这个视图问题改变你的服务器端代码。
您应该使用Unobscursive javascript。 这个例子只会让外部链接上显示的是一个新的窗口:
// jQuery
//
$(document).ready(function() {
$("a").click(function() {
link_host = this.href.split("/")[2];
document_host = document.location.href.split("/")[2];
if (link_host != document_host) {
window.open(this.href);
return false;
}
});
});
完美的作品!谢谢! – kibaekr 2012-12-06 11:52:13
非常好!谢谢 – Automatico 2013-01-20 11:52:36
这对jquery链接造成了问题 – 2013-03-03 12:28:54
在轨3.2+,它已添加作为选项,只需添加
= link_to 'facebook', 'http://www.facebook.com/fb-page', target: '_blank'
并且它会在新选项卡中打开链接。
问题不在于如何在新窗口中打开一个链接;这是如何使所有外部链接在新窗口中打开。 – Simon 2013-12-10 13:57:55
- 1. 如何在新窗口中打开一个URL不在新窗口中
- 2. 在新窗口中打开URL Java
- 3. 如何使用ScriptingBridge通知Safari在新窗口中打开URL?
- 4. Mediawiki在新窗口中打开外部链接
- 5. 如何在mysql中打开外部数据库窗口
- 6. 如何在新选项卡或窗口中打开iframe URL?
- 7. HTML如何在新窗口中打开此URL?
- 8. 如何使用Html.BeginForm打开新窗口
- 9. 如何通过JavaScript在新浏览器窗口中仅打开外部链接?
- 10. 如何在当前窗口中打开IDEA 11新窗口
- 11. 在python中打开新窗口(如vim)
- 12. 如何使用javascript在同一窗口中打开URL?
- 13. 打开新窗口
- 14. 打开新窗口
- 15. 打开新窗口
- 16. 在父窗口中打开URL
- 17. 在新标签而不是新窗口中打开URL
- 18. 在新窗口打开
- 19. 打开在AngularJS新窗口
- 20. 如何使用小部件打开新窗口?
- 21. 如何使用SSRS 2008 reportviewer控件在新窗口中打开url
- 22. 仅使用url打印网页并且不打开新窗口?
- 23. 如何在不离开当前窗口的情况下在新窗口/标签中打开URL?
- 24. 打开新的tkinter窗口后启动外部进程。 [Python]
- 25. 使用javascript窗口打开url编码
- 26. 如何使用javascript在新窗口中打开页面
- 27. 如何使SFSafariViewController在新窗口中打开链接(IOS Development)
- 28. 如何使twitter链接在新窗口中打开
- 29. 如何使用WebBrowser控件“在新窗口中打开”?
- 30. 如何使用css在新窗口中打开链接?
请不要这样做。尊重你的用户,并让他们决定他们希望链接如何打开。 – 2010-11-03 15:38:46
这是一个不错的主意,但我认为我会尊重我的老板,并按我的意思去做。 – Simon 2010-11-03 18:21:34
有时候最好对我们的老板说不。我同意约翰不要这样做 – shingara 2010-11-04 15:17:08