Jquery回调 - 未捕获的ReferenceError

时间:2016-05-08 09:55:39

标签: jquery google-chrome-extension callback

我认为以下问题与范围有关,但我对jQuery插件模式不是很好,我该如何解决?

详情
我尝试使用此an issue

修复chrome extension(跨域)

我想我找到了一个解决方案(使用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 个答案:

答案 0 :(得分:1)

无论如何,这不是从Chrome扩展程序中执行此操作的正确方法。

如果遇到跨源问题,则需要为该源定义主机权限。然后Chrome会忽略CORS。请参阅Google文档中的Requesting cross-origin permissions

为了完整起见,我不鼓励你解决这个问题:

此处的错误是在内容脚本中处理JSONP。 JSONP的工作原理是插入<script>元素,但在回调位于separate content script context时在页面的上下文中执行。这给出了无法找到回调函数的错误。

结果使用JSONP在内容脚本中非常尴尬,如果需要绝对需要委托给后台页面(appropriate CSP considerations)。