Ho bisogno di convertire un sito di binari 2.3 in modo che tutti gli URL esterni si aprano in una nuova finestra. Potrei andare anche se ogni chiamata a link_to
e aggiungere :target => '_blank'
, ma mi piacerebbe farlo in un solo passaggio per tutti i collegamenti, presenti e futuri. C'è un modo in cui posso riprodurre patch_to per ottenere il comportamento desiderato?Come faccio a creare un link per aprire URL esterni in una nuova finestra?
risposta
Alla fine sono andato con questo, in un 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
In Rails 4, '@ controller 'non è definito e anche questa mancanza di supporto https. Qui le modifiche https://gist.github.com/RoxasShadow/b5c59152183ff9ba0757/revisions. Grazie per lo snippet btw. –
Basta aggiungere un aiutante per aggiungere questa opzione nel vostro link_to
Se vuoi aggiungere su ogni link_to per può aggiungere su 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
Oppure è possibile creare il proprio aiutante 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
Non si dovrebbe modificare il codice lato server per questo problema di visualizzazione.
Si consiglia di utilizzare lo scanner inavvertito. Questo esempio servirà solo a rendere i collegamenti esterni che mostra in una nuova finestra:
// 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;
}
});
});
funziona perfettamente! Grazie! – kibaekr
molto bello! Grazie – Automatico
Questo ha causato problemi con i collegamenti jquery –
In rotaie versione successiva alla 3.2, è stato aggiunto come opzione, è sufficiente aggiungere
= link_to 'facebook', 'http://www.facebook.com/fb-page', target: '_blank'
e si aprirà il collegamento in una nuova scheda.
Il problema non è come rendere aperto un collegamento in una nuova finestra; è come rendere tutti i link esterni aperti in una nuova finestra. – Simon
- 1. Mediawiki apre i link esterni in una nuova finestra
- 2. Apri tutti i link esterni aperti in una nuova scheda a parte un dominio
- 3. aprire i collegamenti esterni in una nuova scheda senza jQuery
- 4. Markdown apre una nuova finestra link
- 5. Ruby on Rails: Cetriolo: come faccio a seguire un link che apre una nuova finestra?
- 6. Come aprire un URL arbitrario in una nuova finestra con un pulsante primefaces
- 7. Come posso creare un collegamento ipertestuale HTML a href per aprire una nuova finestra usando window.location?
- 8. Aprire una nuova finestra in a4j: commandButton
- 9. Come aprire una nuova finestra popup facendo clic su un link di azione html in MVC?
- 10. Utilizzo di jQuery per aprire tutti i collegamenti esterni in una nuova finestra
- 11. Aprire una nuova finestra in MVVM
- 12. Android Phone: come aprire gli URL di dominio autorizzati in una nuova finestra del browser?
- 13. jQuery function per aprire il collegamento in una nuova finestra
- 14. Aprire la risposta su una nuova finestra
- 15. Come aprire una nuova finestra in Windows Form in .NET?
- 16. Apri link in una nuova finestra con Capybara
- 17. Aprire un URL in una determinata scheda/finestra del browser
- 18. AngularJS: come aprire un file in una nuova scheda?
- 19. Come aprire una nuova scheda in CasperJS
- 20. Ruby/Rails: apre un URL dal controller in una nuova finestra
- 21. Come aprire una nuova finestra da un collegamento in una webview in un'app cromato
- 22. Aprire una nuova finestra dopo un evento click non funziona in Safari, Chrome
- 23. come aprire un link in una nuova scheda (chrome) usando il selenio web?
- 24. Come aprire una nuova finestra e più url in Safari con lo script Apple?
- 25. Come aprire una nuova finestra sul modulo inviare
- 26. aprire una finestra a comparsa in primavera
- 27. Java Aprire una nuova finestra facendo clic su un pulsante
- 28. Come aggiungere un collegamento per aprire un file pdf in una nuova finestra dalla mia app R shiny?
- 29. Apri URL del link di report in una nuova finestra vuota
- 30. ASP.NET Response.Redirect per aprire una nuova finestra del browser?
Per favore non farlo. Rispetta i tuoi utenti e lascia loro la possibilità di decidere come desiderano aprire i link. –
È una buona idea, ma penso che rispetterò i miei capi e farò come invece mi viene detto. – Simon
a volte è meglio dire di no al nostro capo. Sono d'accordo con John non farlo – shingara