1

这是我得到的错误:

在此处输入图像描述

未缩小的 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 的一部分(我正在使用)

4

1 回答 1

2

好的,看jmpress的源代码,它来自跨域iframe消息传递。基本上 jmpress是这样做的

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,可以将消息发布到主窗口。尝试删除所有这些,看看错误是否消失。

于 2012-08-09T21:24:10.657 回答