这是我得到的错误:
未缩小的 jQuery 1.7.2 javascript 文件中的相关行:
error: function( msg ) {
throw new Error( msg );
},
由此,无法找出错误所在(或者至少我不清楚)。我发现从 jQuery 插件 ( http://shama.github.com/jmpress.js/#/docs ) 取消注释这一行会导致错误停止:
$("#my_div").jmpress();
但我无法获得比这更大的粒度。是否有任何调试技巧可帮助我找出此 JSON 解析发生的位置?
=== 编辑: ===
使用 JSON.parse,我能够追踪到这个试图被解析为字符串的特定字符串:
_FB_f3757ad5f032398xd_action=proxy_ready&data
但无法确定它进入我的代码的位置,但从“FB”前缀来看,这个字符串似乎是 Facebook JS SDK(我正在使用的)的一部分
最佳答案
好的,查看jmpress的源代码它来自跨源iframe消息传递。基本上jmpress does this :
window.addEventListener("message", function(event) {
// We do not test orgin, because we want to accept messages
// from all orgins
try {
var json = JSON.parse(event.data);
switch(json.type) {
case "select":
// TODO SECURITY filter targetId
$.each(eventData.settings.presentationMode.transferredValues, function(idx, name) {
eventData.current[name] = json[name];
});
$(eventData.jmpress).jmpress("select", {step: "#"+json.targetId, substep: json.substep}, json.reason);
break;
case "listen":
current.selectMessageListeners.push(event.source);
break;
case "ok":
clearTimeout(current.presentationPopupTimeout);
break;
case "read":
try {
event.source.postMessage(JSON.stringify({type: "url", url: window.location.href, notesUrl: eventData.settings.presentationMode.notesUrl}), "*");
} catch(e) {
$.error("Cannot post message to source: " + e);
}
break;
default:
throw "Unknown message type: " + json.type;
}
} catch(e) {
$.error("Recieved message is malformed: " + e);
}
});
因此所有发布到主窗口的 iframe 都将通过此事件处理程序并在传递无效 JSON 时记录错误。看起来您的网站上有一个 facebook iframe,可以将消息发布到主窗口。尝试删除所有这些并查看错误是否消失。
关于javascript - 如何找到 "SyntaxError: JSON.parse: unexpected character"的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11891949/