문제

크로스 도메인 Ajax 요청을 만드는 사용자 스크립트를 작성하려고합니다.

@require를 사용하여 스크립트 안에 jQuery를 포함 시켰으며 jQuery.getJson을 실행하려는 지점까지 모든 것이 잘 작동하는 것 같습니다.

내가 액세스하는 API는 JSONP를 지원하지만 JSONP123456789가 정의되지 않았다는 오류가 계속되고 있습니다.

내가 수집 할 수 있었던 것에서 jQuery가 JSONP 응답을 페이지 헤드에 직접 작성한 후 샌드 박스가됩니다. 일단 발생하면 jQuery는 더 이상 콜백에 액세스 할 수 없어 정의되지 않았습니다. (나는 이것이 사실에 대해 100%가 아니지만 나에게있을 것 같다).

이 문제를 해결할 수있는 방법이 있습니까? UnsafeWindow 내부의 콜백 함수를 선언하는 것이 제안되었지만 어떻게 해야할지 잘 모르고 작동하지 않았습니다.

도움이 되었습니까?

해결책

jQuery가 사용한다면 좋지 않을 것입니다 GM_xmlhttpRequest 내부적으로 jQuery 방법의 편의성과 Greasemonkey의 크로스 사이트 기능을 모두 가질 수 있습니까? Mahemoff가 지적했듯이 Greasemonkey는 JSONP에 의존하고 직면 한 콜백 문제에 빠지지 않고 요청을 할 수 있지만 JSON 컨텐츠를 직접 처리해야합니다.

우리는 바로 그 일을 할 도서관을 썼습니다. Greasemonkey/JQuery XHR Bridge. 만약 너라면 @require 사용자 스크립트의 스크립트는 모두입니다 $.get 그리고 $.getJSON 그리고 $.post, jQuery 통화는 JSONP와 같은 기술에 의존하지 않고 크로스 사이트에서 작동합니다.

따라서이 다리를 사용하고 간단히 제거하는 경우 ?callback=? URL에서 jQuery 코드는 수정없이 작동해야합니다. 이 블로그 게시물 단계별 연습을 제공합니다. 브리지 플러그인에 대한 질문, 의견, 버그 보고서 또는 제안이 있으면 알려주십시오.

다른 팁

해결 방법은 gm_httprequest를 사용하는 것입니다. 일반적인 XHR과 달리 GM_HTTPREQUEST는 크로스 도메인 호출을 허용하기 때문에 크로스 도메인 요청에 대한 JSONP 대신에 도망 갈 수 있습니다. 당신은 다음과 같은 것을 원합니다 :

  GM_xmlhttpRequest({
     method: "GET",
     url: "http://example.com/path/to/json",
     onload: function(xhr) {
      var data = eval("(" + xhr.responseText + ")");
      // use data ...
    }
  });

이 평가의 JSON은 가장 간단한 방법입니다. 신뢰할 수없는 JSON을위한보다 안전한 솔루션을 원한다면 작은 JSON 패시 라이브러리.

불행히도, 당신도해야합니다 쓸모없는 제로 기간 설정 타임 아웃을 감싸십시오 모든 주위에. GM_XMLHTTPREQUEST를 자체 방법으로 고수 한 다음 Settimeout (Makecall, 0);.

당신은 볼 수 있습니다 여기서 실제 예.

많은 사람들이 알고 있듯이 Google Chrome은 현재 편리한 GM_ 기능을 지원하지 않습니다.

따라서, 그것은입니다 불가능한 다양한 샌드 박스 제한으로 인해 크로스 사이트 Ajax 요청을 수행하려면 (훌륭한 도구를 사용하더라도 James Padolsey의 크로스 도메인 요청 스크립트)

Chrome에서 Greasemonkey 스크립트가 언제 업데이트되었는지 알 수있는 방법이 필요했습니다 (Chrome도 그렇게하지 않기 때문에 ...). 나는 여기에 문서화 된 솔루션을 생각해 냈습니다 (그리고 나의 등대 ++ 스크립트) 및 버전을 원하는 사람들을 위해 읽을 가치가 있습니다. 스크립트를 확인하십시오.

http://blog.bandit.co.nz/post/1048347342/version-check-chrome-greasemonkey-script

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top