Tôi cần chuyển đổi trang web 2.3 của đường ray để tất cả các URL bên ngoài mở trong một cửa sổ mới. Tôi có thể thực hiện mọi cuộc gọi đến link_to
và thêm :target => '_blank'
, nhưng tôi muốn thực hiện nó trong một bước cho tất cả các liên kết, hiện tại và tương lai. Có cách nào tôi có thể khỉ vá link_to để có được hành vi mong muốn?Làm cách nào để tôi tạo liên kết_để mở các URL bên ngoài trong một cửa sổ mới?
Trả lời
Cuối cùng tôi đã đi với điều này, trong một initialiser:
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
Trong Rails 4, '@ controller' không được xác định và cũng thiếu hỗ trợ https này. Dưới đây là các thay đổi https://gist.github.com/RoxasShadow/b5c59152183ff9ba0757/revisions. Cảm ơn bạn đã gửi đoạn mã btw. –
Bạn chỉ cần thêm một helper để thêm tùy chọn này trong link_to
của bạn Nếu bạn muốn thêm nó vào mỗi link_to để có thể thêm vào 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
Hoặc bạn có thể tạo helper link_to của riêng bạn
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
Bạn không cần phải thay đổi mã phía máy chủ của mình cho vấn đề chế độ xem này.
Bạn nên sử dụng JavaScript không theo hướng dẫn. Ví dụ này sẽ chỉ làm cho các liên kết bên ngoài hiển thị trong một cửa sổ mới:
// 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;
}
});
});
hoạt động hoàn hảo! Cảm ơn! – kibaekr
rất đẹp! Cảm ơn bạn – Automatico
Điều này gây ra sự cố cho tôi với các liên kết jquery –
Trong ray 3.2+, nó đã được thêm vào như một tùy chọn, chỉ cần thêm
= link_to 'facebook', 'http://www.facebook.com/fb-page', target: '_blank'
và nó sẽ mở liên kết trong tab mới.
Vấn đề không phải là cách làm cho một liên kết mở trong một cửa sổ mới; đó là cách làm cho tất cả các liên kết bên ngoài mở trong một cửa sổ mới. – Simon
- 1. Mediawiki mở liên kết bên ngoài trong một cửa sổ mới
- 2. Làm cách nào để mở các liên kết mới bên ngoài iframe?
- 3. Mở URL SSRS trong Cửa sổ mới
- 4. Sử dụng jQuery để mở tất cả các liên kết bên ngoài trong một cửa sổ mới
- 5. Làm cách nào để mở một cửa sổ mới bằng URL được tạo bên trong hàm gọi lại getScript và tránh trình chặn cửa sổ bật lên?
- 6. WinForms WebBrowser Control: Buộc tất cả các liên kết mở ra bên ngoài trong một cửa sổ (IE) mới
- 7. System.Windows.Forms.WebBrowser mở liên kết trong cùng cửa sổ hoặc cửa sổ mới với cùng một phiên
- 8. Làm cách nào để tạo một cửa sổ mới từ bên trong QML?
- 9. mở một liên kết trong một tab mới trong cùng một cửa sổ
- 10. Làm cách nào để tạo liên kết a href HTML mở một cửa sổ mới bằng cách sử dụng window.location?
- 11. Mở tệp liên quan đến rails.vim trong cửa sổ mới
- 12. làm thế nào để tạo ra một cửa sổ với hai nút đó sẽ mở ra một cửa sổ mới
- 13. Tạo bất kỳ liên kết nào với .pdf mở trong cửa sổ mới bằng jQuery?
- 14. Cách mở tệp mới trong vim trong cửa sổ mới
- 15. Ruby on Rails: Dưa chuột: làm thế nào để tôi theo một liên kết mở ra một cửa sổ mới?
- 16. Làm cách nào để mở một cửa sổ mới và nhiều url trong Safari bằng tập lệnh táo?
- 17. Làm cách nào để liên kết Wordpress 'Preview' mở trong cùng một cửa sổ?
- 18. Phonegap Android: Cách mở url miền trong danh sách trắng trong cửa sổ trình duyệt mới?
- 19. Mở liên kết trong cửa sổ mới với Capybara
- 20. mở tab mới (cửa sổ) bằng cách nhấp vào liên kết trong jquery
- 21. HTML: cách buộc liên kết mở trong tab mới, không phải cửa sổ mới
- 22. Làm cách nào để mở một cửa sổ trên một chuỗi mới?
- 23. Mở tệp mới trong cửa sổ gui mới hoặc bằng cách tách cửa sổ
- 24. Mở hình ảnh trong cửa sổ mới
- 25. Nút mở trong cửa sổ mới?
- 26. Làm cách nào để mở một cửa sổ dọc khác (: vsp) ở bên trái trong vim?
- 27. Làm cách nào để "Mở trong Cửa sổ mới" bằng cách sử dụng điều khiển WebBrowser?
- 28. url.Chuyển liên kết mở trong cửa sổ mới trên ASP.NET MVC Page
- 29. Google CSE mở trong cửa sổ mới
- 30. Eclipse: Mở trong Cửa sổ mới
Vui lòng không làm điều này. Tôn trọng người dùng của bạn và để lại cho họ để quyết định cách họ muốn liên kết mở. –
Đó là một ý tưởng hay, nhưng tôi nghĩ tôi sẽ tôn trọng các ông chủ của tôi và làm như tôi được bảo. – Simon
đôi khi tốt hơn nên nói không với ông chủ của chúng tôi. Tôi đồng ý với John không làm điều này – shingara