2016-06-03 3 views
0

사용자가 링크를 클릭 할 때 새 탭을 열려고합니다. 링크는 사용자가 생성했으며 사용자가 www.google.com과 같은 URL을 입력하면 탭이 예상대로 작동하지 않습니다. 이 문제를 보여주는 jsFiddle이며,이 코드입니다 :새 탭에서 URL을 열면 URL이 완료되지 않은 경우 404가 생성됩니다.

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

어떻게이 문제를 해결할 수 있습니까? 사용자에게 올바른 URL을 입력하도록하는 것은 옵션이 아닙니다.

감사

+0

은 절대 URL은 HTTP'로 시작하기 때문에 : //','https : //로','FTP :'... –

+0

당신이 보여줄 수 우리는 HTML/js에서 사용자가 어떻게 URL을 입력하게합니까? – JoeL

+0

@ JoeL : 사용자가 스프레드 시트를 판매 소프트웨어에 업로드하는 웹 앱입니다. 사이트를 보려면 내 프로필을 참조하십시오. – frenchie

답변

3

의정서 window.open() 기능은 URL을 요청할 때 적절한 프로토콜이 존재하는 것으로 예상

을 잊지 마세요 (http:// 같은 프로토콜을 추가해야합니다 , ftp://, https:// 등)이므로 제대로 작동하려면 다음을 포함해야합니다.

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

수동으로 추가 의정서

명시 적으로 어떤 이유에 대한 프로토콜을 생략해야하는 경우, 당신은 당신을 위해 당신의 창을 열어 처리하는 함수를 작성 고려할 수 :

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); 
    } 
} 

을하는 것 코드를 다음과 같이 변경하십시오.

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

참고

모질라에 따르면, 유용성에 대한 염려가 있으므로 generally don't recommend using links in this manner to open new windows via window.open() if at all possible입니다. 이들의 best practices은 창 열기를 처리하는 두 번째 방법과 유사한 외부 기능을 사용할 것을 권장합니다. 당신이 당신의 페이지의 사용자가 제공 한 URL로 자동으로 프로토콜을 추가하려면

+0

프로그래머가 아닌 사용자가이를 이해하지 못하는 문제가 있습니다. 일반 사용자가 생각하는 방식으로 작업해야합니다. – frenchie

+0

그런 경우이 논리를 캡슐화하고 위의 업데이트에서 언급 한 것처럼 프로토콜이없는 경우 프로토콜을 추가하는 함수를 만들 수 있습니다. –

1

이 시도 :

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

그것은 새 탭에서 열리고 800 × (800)는 윈도우의 크기입니다.

1

당신은 즉 http:// 또는 https://

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

당신은 더 빨랐다 :) – Grisza

+0

프로그래머가 아닌 사용자는 이것을 이해하지 못한다는 문제점이있다. 일반 사용자가 생각하는 방식으로 작업해야합니다. – frenchie

2

, 다음과 같은 기능이 작업을 수행 할 수 있습니다

자바 스크립트 (요구 사항이 페이지에 어딘가에 추가 할)를 :

<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> 
관련 문제