我需要转换rails 2.3网站,以便在新窗口中打开所有外部URL。我可以通过每次拨打link_to
并添加:target => '_blank'
,但我想一步到位,无论是现在还是将来。有没有办法我可以修补link_to以获得所需的行为?
答案 0 :(得分:17)
您不必为此视图问题更改服务器端代码。
你应该使用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;
}
});
});
答案 1 :(得分:4)
最后,我在初始化中使用了这个:
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
答案 2 :(得分:3)
您只需添加一个帮助程序即可在link_to
中添加此选项如果你想在每个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帮助
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
答案 3 :(得分:1)
在rails 3.2+中,它已作为选项添加,只需添加
= link_to 'facebook', 'http://www.facebook.com/fb-page', target: '_blank'
然后在新标签页中打开链接。