我们在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>
答案 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