googlechrome-Javascript错误,webkit浏览器从iframe导航内容

google chrome - Javascript bug with webkit browser navigating content from an iframe

本文关键字:iframe 导航 浏览器 错误 webkit googlechrome-Javascript      更新时间:2023-09-26

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

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

这两个页面的内容相同,但iframe模板不同。

例如,单击此链接会将用户带到Awards Recognition内容,它会将AMU模板包裹在同一页面上,并在URL后附加#AMUhttp://www.apus.edu/alumni/awards-recognition/index.htm#AMU

这是完全相同的内容,但由于#APU附加到URL,它将围绕同一页面包装APU模板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>

如果(frameEl){

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

看起来修改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>

把这个放在你的文档末尾,它应该会像你期望的那样工作。您可能想尝试的另一件事是,与其在document-ready上调用该函数,不如在#iframe的ready函数上调用:

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

也许可以尝试:

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

对于Chrome