我需要转换rails 2.3站点,以便在新窗口中打开所有外部URL.我可以通过每个电话link_to
和添加:target => '_blank'
,但我想一步到位,所有链接,现在和未来.有没有办法我可以修补link_to以获得所需的行为?
Nic*_*nco 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;
}
});
});
Run Code Online (Sandbox Code Playgroud)
最后我在初始化程序中采用了这个:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19575 次 |
最近记录: |