我需要轉換一個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