4

我正在尝试在可在客户网站上使用的 iframe 中创建登录小部件。这个 iframe 将使用 jQuery,但我首先无法检查父文档是否加载了 jQuery,如果没有,则加载它。

我尝试了几种不同的技术,但似乎都没有奏效,或者决定两次加载 jQuery 库。

任何帮助将不胜感激。

此代码块位于 iframe 内加载的页面内,该页面拒绝合作。

<script>

var jQOutput = false;

function initjQuery() { 

if (typeof(jQuery) == 'undefined'){     
    if (!jQOutput){         
        jQOutput = true;

        var jScript = document.createElement('script');
        jScript.setAttribute("type", "text/javascript");
        jScript.setAttribute("src", "js/libs/jquery/jquery-min.js");
    }
    setTimeout("initjQuery()", 50);
} else {
    $(function() {
        $("#email").css({"background":"red"});
        //visual aid to see if jQuery is loaded.
    });
} 
}
</script>

我只想检查 iframe 的父级是否已加载 jQuery,如果没有,请自行加载,因为我将使用它来执行完成登录过程所需的多项任务。

4

2 回答 2

1

小部件的 JavaScript 代码必须分为两部分。其中一个将加载到客户的站点上。它将有权访问站点的 DOM:如果需要,加载 jQuery,创建 iframe 等(请特别注意那里的全局变量!尽量不要使用它们,因为它们可能与站点的代码冲突。 ) 请注意,这部分无法访问 iframe 的 DOM。这就是为什么你需要第二部分,它会被加载到 iframe 中。您可以使用跨域技术使部件相互交换消息。我建议您查看easyXDM 库

于 2012-10-01T11:15:02.630 回答
1

附注评论:

由于同源策略(通过 JavaScript 跨域访问),我不认为您想要存档的内容是可能的 - 在 Google 上查看它... http://google.com/search?q=same+origin+policy


另一方面,如果您不违反相同的来源政策,您可以使用以下内容归档您想要的内容:

var parent = window.parent; // This refers to parent's window object

if ( parent && parent.jQuery ) { // Check to see if parent and parent.jQuery is truly
    window.jQuery = parent.jQuery;
    window.$ = parent.jQuery;
}
else {
    // load jQuery here
}
于 2012-10-01T10:12:28.120 回答