Webkit浏览器导航来自iframe的内容的Javascript错误

时间:2011-06-28 14:49:45

标签: javascript google-chrome iframe safari webkit

我们在IE和Firefox浏览器中使用此解决方案,您可以在下面进行演示,但是如果您使用Chrome或Safari单击演示链接,内容将不断循环iframe源中的模板,这是我需要您的地方帮助解决Chrome / Safari问题的解决方案。

我们需要一个解决方案,让我们的用户直接访问我们的iframed页面,当他们访问页面时,它会用适当的iframe模板包装页面。如上所述,该解决方案适用于IE / Firefox,但不适用于Chrome和Safari。

这两个页​​面都有相同的内容,但是有一个不同的iframed模板。

例如,点击此链接会将用户带到奖励识别内容,它会将AMU模板包装在同一页面上,并在URL附加#AMU http://www.apus.edu/alumni/awards-recognition/index.htm#AMU

这是完全相同的内容,但它会将APU模板包装在同一页面上,因为#APU会附加到URL http://www.apus.edu/alumni/awards-recognition/index.htm#APU


以下是父iframe上的javascript: http://www.apu.apus.edu/community/alumni/index.htm

<script type="text/javascript">
function gup( name ) {
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)"; 
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if( results == null )
        return "";
    else
        return results[1];
}
var ifSrc = gup("forward");
$(function(){ 
    if(ifSrc)
        $("#iframe").attr('src', ifSrc);
});
</script>

以下是源内容及其将继续发布的页面的代码: http://www.apus.edu/alumni/awards-recognition/index.htm

<script type="text/javascript">
function fnGetDomain(url) {
    if(url)
        return url.match(/:\/\/(.[^/]+)/)[1];
    else
        return "";
}
var curDomain = fnGetDomain(document.referrer);
var curHash = document.location.hash.toLowerCase();
try { frameEl = window.frameElement; }
catch(e) { frameEl = 1; }
if(!frameEl) {
//if (frameElement == null) {
    if(!curDomain)              curDomain = "www.apu.apus.edu";
    if(curHash == "#apu")       curDomain = "www.apu.apus.edu";
    else if(curHash == "#amu")  curDomain = "www.amu.apus.edu";
    //change location or close
    window.location = "http://" + curDomain + "/community/alumni/index.htm?forward=" + document.location.href;
    // or window.close();
}
</script>

3 个答案:

答案 0 :(得分:1)

这之前if(frameEl){

if ($.browser.webkit) {
    if(top === self) frameEl = 0;
    else frameEl = 1;
}

答案 1 :(得分:0)

看起来修改iframe会导致$(document).ready()反复触发。你有没有尝试将这个从jQuery调用更改为文档就绪到立即函数?

<script type="text/javascript">
function gup( name ) {
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)"; 
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if( results == null )
        return "";
    else
        return results[1];
}
var ifSrc = gup("forward");

// edit: notice no $ in front, and () at the end.
(function(){ 
    if(ifSrc) {
     var iframe = document.getElementById('iframe');
     iframe.src = ifSrc;
    }
})();

</script>

将它放在文档的末尾,它应该按照您的预期工作。您可能想要尝试的另一件事是在文档准备好的情况下调用该函数,在#iframe的就绪函数上执行:

$('#iframe').ready(function(){ 
    if(ifSrc)
        $("#iframe").attr('src', ifSrc);
});

答案 2 :(得分:0)

也许试试:

if (top === self) { 
  frameEl = 1;
}

for Chrome