2016-05-08 10 views
0

以下の問題はスコープに関連していると思いますが、jQueryのプラグインパターンではあまりよくありません。どうすれば解決できますか?Jqueryのコールバック - キャッチされていないReferenceError

詳細
私はこのchrome extension

で(クロスドメイン)an issueを修正しようとしている私は、私は(anyorigin.comを使用して)解決策を見つけたが、私は$.getJSONと新しい問題だと思う:

を私は問題をどこに行く
Uncaught ReferenceError: jQuery19109374020271279013_1462700430014 is not defined: 

?url=https%3A//thepiratebay.cr/search/I%20Will%20Survive%201999/0/7/0&callback=jQuery19109374020271…:1 Uncaught ReferenceError: jQuery19109374020271279013_1462700430016 is not defined(anonymous function) @ ?url=https%3A//thepiratebay.cr/search/I%20Will%20Survive%201999/0/7/0&callback=jQuery19109374020271…:1 

ここでコードがdoSearch()の関係は次のとおりです。

(function($) { 
     $.fn.extend({ 
      tpbSearch : function(options){ 
       var defaults = { searchTerm: ''}; 
       var options = $.extend(defaults, options); 
       return this.each(function(){ 
        doSearch($(this), options.searchTerm); 
       }) 
      } 
     }); 

     // private functions 
     // .... 

     function buildSearchUrl(searchTerm) 
     { 
      var searchPart = 'https://thepiratebay.cr/search/' + encodeURIComponent(searchTerm) + '/0/7/0'; 
      var searchUrl = 'http://anyorigin.com/get?url=' + escape(searchPart) + '&callback=?'; 

      return searchUrl; 
     } 
     // function where the issue happens. 
     function doSearch(container, searchTerm){ 
      // here we should iterate over the container selector, because it's possible multiple items will be selected. 
      var sanitizedSearchTerm = sanitizeSearchTerm(searchTerm); 

      // set the default logo 
      var loadingImageUrl = chrome.extension.getURL('images/ajax-loader.gif'); 
      var logo = $('<img id="tpb-logo">') 
         .attr('src', loadingImageUrl) 
         .css('width', '25px') 
         .css('height', '25px'); 
      container.children().remove(); 
      container.append(logo); 

      var searchUrl = buildSearchUrl(sanitizedSearchTerm); 

      $.getJSON(searchUrl, function(data){ 
       alert('aa'); 
      }); 
     } 
}(jQuery)); 

答えて

1

これは、とにかくChrome拡張機能からは正しい方法ではありません。

クロスオリジンの問題が発生した場合は、そのオリジンに対してホストのアクセス許可を定義する必要があります。その後、ChromeはCORSを無視します。 GoogleのドキュメントのRequesting cross-origin permissionsを参照してください。完全のために


、私はこれを固定からあなたを落胆かかわら:ここ

あなたのエラーは、コンテンツスクリプトでJSONPを扱っています。 JSONPは<script>要素を挿入して動作しますが、コールバックがseparate content script contextの間はページのコンテキストで実行されます。これにより、コールバック関数を見つけることができないというエラーが発生します。

JSONPを使用するとコンテンツスクリプトが本当に扱いにくく、絶対に必要なものがバックグラウンドページ(appropriate CSP considerations)に委任されている必要があります。

+0

JSONの部分(jsコンソールの同じページにある同じコマンド)について正しいのかどうか分かりませんが、とにかくCORSとChromeのextについては絶対に正しいです。それは魅力のように働く。 Thx – WonderLand

+1

ああ、そのコードはコンテンツスクリプトのものです。その後、問題は孤立した世界です。私は正しい答えを更新しました。 – Xan

関連する問題