2015-01-30 3 views
2

내 웹 사이트에서 Google 어스 플러그인을 조금만 더 사용해야합니다. API가 사용되지 않지만 여러 달 동안 계속 사용하고 있습니다. 나는 다음과 같이 google.load를 호출 google.com/jsapi을 포함하여로드 :이 여러 컴퓨터에서 우리 회사의 방화벽 내부에 여러 브라우저에서 잘 작동Google jspai를로드 할 수 없지만 고객 만 해당

... 
    <script type="text/javascript" src="https://www.google.com/jsapi"></script> 
    <script type="text/javascript"> 
     google.load("earth", "1", {"other_params": "sensor=false"}); 
     google.setOnLoadCallback(function() { 
      // call some JavaScript to begin initializing the GE plugin 
     }); 
    </script> 
</body> 
</html> 

. 그것은 내 집 컴퓨터와 제 동료의 집 컴퓨터에서 잘 작동합니다. 그러나 고객이로드하려고 시도하면 google.load(으로 시작하는 줄에 Google이 정의되어 있지 않다는 오류 메시지가 표시됩니다.

물론 글로벌 변수 google은 www.google.com/jsapi 파일의 시작 부분에 정의되어 있으므로 파일이로드되지 않는 것 같습니다. 처음에는 회사 방화벽이 해당 파일을 차단한다고 가정했지만 브라우저 주소창에 "https://www.google.com/jsapi"을 붙여 넣으라고 요청했을 때 즉시 JavaScript 페이지를로드했습니다.

브라우저 콘솔에 전체 출력은 다음과 같습니다

Invalid URI. Load of media resource failed. main.html 
ReferenceError: google is not defined main.html:484 

그리고 잘못된 URI 사업은 우리가의 favicon.ico 파일이없는해서 믿습니다.

그녀는 Firefox 35.0.1을 실행 중입니다. IE에서 (IE 버전은 언급하지 않은) IE에서 같은 오류가 발생했다고합니다.

필자에게 Firebug를 설치할 것을 요구하는 것보다는 짧은 것이지만,이 문제를 어떻게 해결할 수 있습니까? 고객이 오류가 발생하면 다음과 같이 코드를 다시 배포

+0

jsapi에 갔을 때 나온 JS를 보내셨습니까?그렇다면, 당신이 얻는 것과 일치합니까? – Dancrumb

+0

또한 그녀가 브라우저에서받는 소스 HTML을 보내도록 제안하는 것이 좋습니다 ... 어플라이언스가 네트워크 경로에 있는지 알지 못하며 그 중 일부는 콘텐츠를 수정할 수 있습니다. – Dancrumb

+0

그녀의 브라우저가받는 소스 HTML은 다음과 같습니다. 내 서버가 보내는 것과 동일합니다. 그녀의 브라우저에 나타나는 jsapi 파일에는 사소한 차이점이 있습니다. 도시와 주정부는 "Dunn Loring"과 "Virginia"이고, 반면에 광산은 "Washington"과 "DC"입니다. 그녀의 로더 라이브러리와 버전 번호 중 일부는 광산과 다른 순서로되어 있습니다. 예를 들어, 광산은 ext-core 이전에 나열된 많은 webfont 파일을 보유하고 있습니다. Hers는 webfont에 ext-core 목록이 있습니다. 그러나 "지구"에 대한 언급은 동일합니다. – dgvid

답변

1

은 다음

<script type="text/javascript"> 
    try { 
     google.load("earth", "1", {"other_params": "sensor=false"}); 
     google.setOnLoadCallback(function() { 
     // call some JavaScript to begin initializing the GE plugin 
     }); 
    } catch (e) { 
     $.post('http://<your-remote-debug-script-or-service>',e) 
    } 
</script> 

, 전체 세부 사항은 서버에 직접 전송됩니다 그리고 당신은 필요에 따라 문제를 해결할 수 있습니다.

+0

이것은 훌륭한 기술입니다. 이 특별한 경우에는 예외가 "ReferenceError : google은 main.html : 484로 정의되지 않았습니다."라는 것을 이미 알고 있습니다. – dgvid

3

나는 그 가정을 잘 모르겠다. : 첫 번째 스크립트가 비동기로로드 될 수 있습니까? 그런 다음 느린 연결 (귀하의 고객)이 문제가 발생할 것이라고 (나는 당신이 비동기 태그를 사용하고 있지 않습니다 -하지만 어쩌면 소스 비동기를로드하는 트리거 할 수) 발생합니다.

가장 좋은 방법은 사용중인 Google 코드가 sync 종류인지 재배포하는 것입니다.

https://bugsnag.com/도 매우 흥미로운 도구가 될 수 있습니다. js를 구현하면 고객이받는 모든 오류를 추적 할 수 있습니다.

+1

비동기 제안은 이러한 일관성없는 오류와 일치합니다 –

+0

그래서 ''이 동 기적으로로드된다는 것을 생각하면 순진하지 않습니까? 즉,'async = false'가 기본값이 아닌 것입니까? – dgvid

+0

일반적으로 동기식을로드해야합니다. 나는 그것이 가정이라고 말했듯이 - 그러나 나는 프로젝트 내에서 나 자신의 문제를 가지고 있었다! 그래서 한번 시도 해봐야합니다. –

0

클라이언트 브라우저가 javascript가 실행되는 것을 차단하는 것처럼 간단 할 수 있습니다. 아마 당신의 도메인이나 그와 같은 미친 것을 특별히 차단할 수 있습니다.

0

google jsapi를로드하는 외부 스크립트를 시도한 다음 콜백에 코드를 넣어로드되었는지 확인하십시오. (http://www.nczonline.net/blog/2009/07/28/the-best-way-to-load-external-javascript/에서 수정 된)

<script type="text/javascript"> 

function loadScript(url, callback){ 

    var script = document.createElement("script") 
    script.type = "text/javascript"; 

    if (script.readyState){ //IE 
     script.onreadystatechange = function(){ 
      if (script.readyState == "loaded" || 
        script.readyState == "complete"){ 
       script.onreadystatechange = null; 
       callback(); 
      } 
     }; 
    } else { //Others 
     script.onload = function(){ 
      callback(); 
     }; 
    } 

    script.src = url; 
    document.getElementsByTagName("head")[0].appendChild(script); 
} 

loadScript("https://www.google.com/jsapi", function(){ 
    google.load("earth", "1", {"other_params": "sensor=false"}); 
    google.setOnLoadCallback(function() { 
     // call some JavaScript to begin initializing the GE plugin 
    }); 
}); 
</script> 

는 또한로드 것을 최소화하기 위해 JSAPI 자동로드를보고 할 수 있습니다,하지만 이전 라이브러리와 까다로운받을 수 있습니다. https://developers.google.com/loader/

관련 문제