【问题标题】:Chrome extension transfer to manifest 2 - No ajax responseChrome 扩展程序转移到清单 2 - 没有 ajax 响应
【发布时间】:2013-05-06 15:19:49
【问题描述】:

哈什! 一直在尝试将我的 Chrome 扩展程序转移到清单 2。除了一个调用 ajax 的脚本外,一切正常。我有一个包含需要传输到服务器的 JSON 内容的变量。

function sendlist(list){

jsontext = JSON.stringify(list);

$.ajax({
        url: amfurl + "user/listbookmarks/",
            dataType: 'text json',
        async: true,
        type: 'POST',
        processData: false,
            data: {'folders': jsontext}, 

        success: function(data){
            $('#importing').css('display','none');
            $('#importdone').css('display','block');
            console.log(data);      
        },
        error: function(xhr, status, error) {
            var err = eval("(" + xhr.responseText + ")");
        alert(err.Message);
}
});  
}

由于某种原因,ajax 部分根本没有执行。没有触发错误消息,也没有在服务器错误日志中。

所有内联脚本和一般脚本都包含在 popup.js 中。所以这可能不是问题。

有什么想法吗?

谢谢!

以下代码在以前的清单上完美运行

function importbookmarks(){
$('#formadd').css('display','none');
$('#importing').css('display','block');
_gaq.push(['_trackEvent', 'chromextension','importbookmarks', username]);
 chrome.bookmarks.getTree(function(bookmarks) {
        sendlist(bookmarks);
   });
}


function sendlist(list){
jsontext = JSON.stringify(list);
$.ajax({
        url: amfurl + "user/listbookmarks/",
            dataType: 'text json',
        async: true,
        type: 'POST',
    //  processData: false,
            data: {'folders': jsontext}, 

        success: function(data){
            $('#importing').css('display','none');
            $('#importdone').css('display','block');
            console.log(data);

        }
});  
}

【问题讨论】:

  • 不要使用 eval,而是使用 JSON.parse(默认 CSP 禁止使用 eval)。您正在执行 JSONP 请求而不是 JSON 的任何更改?您是否在清单文件中请求了主机权限?
  • 用 JSON.parse 替换了 eval。在 async 上面应用了 jsonp:false 并且页面中设置了权限。似乎它根本不执行ajax。页面上的其他脚本确实有效。
  • 您的意思是在上一条评论中使用bookmarks 而不是jsonlist
  • 真的没有报错吗?甚至没有关于内容安全策略的警告..?您需要检查控制台的弹出窗口。
  • 什么都没有,检查了弹出窗口和所有内容。也试过直接打印它并发出警报。

标签: json google-chrome jquery google-chrome-extension


【解决方案1】:

问题不在于函数。按钮执行没有正确调用它。 这是我用来让函数在清单 2 中工作的代码

document.addEventListener("DOMContentLoaded", function () {
    document.getElementById("import-bookmarks").addEventListener("click", function () {
        importbook();return;
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-03
    • 2018-03-09
    • 2012-08-02
    • 2021-03-26
    • 2020-11-28
    • 2012-08-02
    • 2014-02-17
    相关资源
    最近更新 更多