Necesito convertir un sitio de carriles 2.3 para que todas las URL externas se abran en una nueva ventana. Podría ir a través de cada llamada al link_to
y agregar :target => '_blank'
, pero me gustaría hacerlo en un solo paso para todos los enlaces, presentes y futuros. ¿Hay alguna manera de que yo pueda parchear link_to para obtener el comportamiento deseado?¿Cómo hago link_to para abrir URL externas en una nueva ventana?
Respuesta
Al final me fui con esto, en un inicializador:
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
En Rails 4, '@ controller' no está definido y también carece de compatibilidad con https. Aquí los cambios https://gist.github.com/RoxasShadow/b5c59152183ff9ba0757/revisions. Gracias por el fragmento por cierto. –
Usted acaba de agregar un ayudante para añadir esta opción en su link_to
Si desea añadir que en cada link_to que se puede añadir en 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
O puede crear su propio ayudante 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
No debe tener que cambiar el código del lado del servidor para este problema de vista.
Debería usar Unobscursive javascript. Este ejemplo sólo hará que los enlaces externos a aparecer en una nueva ventana:
// 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;
}
});
});
funciona a la perfección! ¡Gracias! – kibaekr
muy bueno! Gracias – Automatico
Esto me causó problemas con los enlaces de jquery –
En los carriles 3.2 o versiones posteriores, se ha añadido como una opción, simplemente agregue
= link_to 'facebook', 'http://www.facebook.com/fb-page', target: '_blank'
y se abrirá el enlace en una nueva pestaña.
El problema no es cómo hacer que un enlace se abra en una nueva ventana; es cómo hacer que todos los enlaces externos se abran en una nueva ventana. – Simon
- 1. enlace URL informe Abrir en una nueva ventana en blanco
- 2. ¿Cómo puedo abrir un enlace en una nueva ventana?
- 3. Abrir respuesta en una nueva ventana
- 4. abrir una nueva ventana en a4j: commandButton
- 5. Rieles: Abrir enlace en una nueva pestaña (con 'link_to')
- 6. Abrir la imagen en una nueva ventana
- 7. Eclipse: Abrir en una nueva ventana
- 8. ¿Abrir el botón en una ventana nueva?
- 9. Abrir una nueva ventana en silverlight
- 10. Cómo abrir una nueva ventana en el formulario enviar
- 11. Abrir página en una nueva ventana sin ventana emergente
- 12. Android WebView Ventana nueva URL
- 13. ¿Cómo abrir una nueva ventana e insertar html usando jQuery?
- 14. ¿Cómo abrir una nueva ventana en Windows Forms en .NET?
- 15. ¿Imprime una página web solo con url y sin abrir una nueva ventana?
- 16. Cómo abrir en una ventana nueva usando el control WebBrowser?
- 17. ¿Android WebView necesita permisos para abrir URL externas?
- 18. ¿Cómo abrir una nueva ventana y varias URL en Safari con Apple Script?
- 19. Abrir el enlace en una nueva ventana con Jquery
- 20. Ruby/Rails - Abrir una URL desde el controlador en una nueva ventana
- 21. cómo abrir la URL en una nueva pestaña de django?
- 22. Cómo abrir una nueva ventana usando MVVM Light Toolkit
- 23. .click() evento cuando 'Abrir en pestaña/ventana nueva'
- 24. Javascript Publicar en el formulario Enviar abrir una nueva ventana
- 25. Cómo abrir una nueva ventana de applet desde un applet
- 26. Crear un botón de tweet sin abrir una nueva ventana
- 27. Mediawiki abrir enlaces externos en una nueva ventana
- 28. ASP.NET MVC abrir archivo pdf en una nueva ventana
- 29. Java Abrir una nueva ventana haciendo clic en un botón
- 30. Abrir el enlace en una nueva ventana con Capybara
No haga esto. Respeta a tus usuarios y déjalos que decidan cómo les gustaría que se abran los enlaces. –
Es una buena idea, pero creo que respetaré a mis jefes y haré lo que me digan. – Simon
a veces es mejor decir no a nuestro jefe. Estoy de acuerdo con John no hagas esto – shingara