【发布时间】: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