2016-06-03 8 views
0

Ich möchte eine neue Registerkarte öffnen, wenn ein Benutzer auf eine Verknüpfung klickt. Der Link wird vom Nutzer generiert. Wenn Nutzer eine URL wie www.google.com eingeben, funktioniert die Registerkarte nicht wie erwartet. Dies ist ein jsFiddle das Problem zu zeigen, und das ist der Code:Das Öffnen einer URL in neuen Tabs generiert 404, wenn die URL nicht vollständig ist.

<a href="javascript: var a = window.open('www.google.com')">open new tab</a> 

Wie kann ich dieses Problem beheben? Benutzern die Eingabe einer wohlgeformten URL zu empfehlen, ist keine Option.

Dank

+0

Weil absolute URLs beginnen mit 'http: //', 'https: //', 'ftp:' ... –

+0

können Sie zeigen uns im HTML/js wie Sie den Benutzer eine URL eingeben lassen? – JoeL

+0

@JoeL: Es ist eine Web-App, wo Benutzer eine Tabelle in eine Verkaufssoftware hochladen. Sehen Sie sich mein Profil an, um sich die Seite anzusehen. – frenchie

Antwort

3

das Protokoll nicht anwesend sein

Die window.open() Funktion das entsprechende Protokoll erwartet Vergessen hinzuzufügen, wenn die URL anfordert (dh http:// , ftp://, https://, usw.), so müssen Sie sicherstellen, dass Sie diese Funktion ordnungsgemäß einbeziehen:

window.open('http://www.google.com'); 

Manuelles Anfügen Das Protokoll

Wenn Sie benötigen, um das Protokoll explizit weglassen für welchen Gründen auch immer, könnte man erwägen, eine Funktion zu schreiben, damit Sie Ihre Fenster zu behandeln öffnen:

function openWindowAndAppendProtocol(url){ 
    if(/^https?:\/\//i.test(url)){ 
     // If it doesn't start with http:// or https://, then append it 
     return window.open('http://' + url); 
    } 
} 

das würde Ändern Sie den zu verwendenden Code:

var a = openWindowAndAppendProtocol('www.google.com'); 

Hinweis

Laut Mozilla, sie generally don't recommend using links in this manner to open new windows via window.open() if at all possible, da es einige Usability Bedenken bringen kann. Ihr best practices empfiehlt, eine externe Funktion zu verwenden, die dem zweiten Ansatz ähnelt, um das Öffnen des Fensters zu behandeln.

+0

Problem ist, dass Benutzer, die keine Programmierer sind, das nicht verstehen. Muss so arbeiten, wie es typische Benutzer denken. – frenchie

+0

Wenn das der Fall ist, möchten Sie möglicherweise eine Funktion erstellen, die diese Logik für Sie kapseln und das Protokoll anfügen, wenn es nicht existiert, wie in meinem Update oben erwähnt. –

1

Try this:

<a onclick="window.open('https://www.google.com', 'Google', 'width=800,height=800')"> 

Es in einem neuen Tab öffnet und 800 × 800 sind die Abmessungen des Fensters.

1

Sie benötigen ein Protokoll wie http:// oder https://

<a href="javascript: var a = window.open('http://google.com')">open new tab</a>` 
+0

Sie waren schneller :) – Grisza

+0

Problem ist, dass Benutzer, die nicht Programmierer sind, dies nicht verstehen. Muss so arbeiten, wie es typische Benutzer denken. – frenchie

2

Wenn Sie ein Protokoll automatisch zu einer URL hinzufügen mögen, die ein Benutzer Ihrer Seite zur Verfügung gestellt, können Sie dies mit der folgenden Funktion tun:

JavaScript (Bedürfnisse irgendwo auf Ihrer Seite hinzugefügt werden):

<script type="text/javascript"> 
    function openURL(url) { 
     var allowedProtocols = ["http://", "https://", "ftp://", "ftps://"]; 
     var hasPrefix = false; 

     for(var i = 0; i < allowedProtocols.length; i++) { 
      if(url.substring(0, allowedProtocols[i].length) === allowedProtocols[i]) { 
       hasPrefix = true; 
       break; 
      } 
     } 

     if(!hasPrefix) { 
      url = "http://" + url; 
     } 

     window.open(url); 
    } 
</script> 

HTML:

<a onclick="openURL('www.google.com')">Google</a> 
Verwandte Themen