gpt4 book ai didi

Jquery postmessage 不一致

转载 作者:行者123 更新时间:2023-12-01 00:20:40 38 4
gpt4 key购买 nike

我正在尝试使用 Ben Almans jquery postmessage调整 iFrame 的大小。我或多或少地将他的示例与不同的服务器和动态内容一起使用。

我也在该网站上发布了一个问题,但这可能是一个新手问题,无法真正回答。

我已经可以跨域发送消息了,但是调整大小不起作用。我只是在这里重新发布我以 Toby 身份发布的内容:

I can't get the iFrame to consistently resize across browsers. Is this someting you have encountered? I added a timestamp to know when each function is called, and its quite strange...:
- Firefox works fine - childpage runs before parentpage.
- Chrome 7 will expand, not shrink. Timestamp = child before parent
- IE 8... parent runs before child...! and iframe increases by 30 each click on either links.

大家有这方面的经验吗?

添加我的两个页面以供代码引用:
父级

<html>
<head>
<script language="javascript" src="jquery-1.4.2.min.js" type="text/javascript"></script>
<script language="javascript" src="jquery.ba-postmessage.js" type="text/javascript"></script>
<script>
$(function(){

// Keep track of the iframe height.
var if_height,

// Pass the parent page URL into the Iframe in a meaningful way (this URL could be
// passed via query string or hard coded into the child page, it depends on your needs).
//src = 'http://oslsrv03/cross_remote/cross_remote.htm#' + encodeURIComponent( document.location.href ),
src = 'http://oslsrv01/crosstest/child_postmessage.html#' + encodeURIComponent( document.location.href ),

// Append the Iframe into the DOM.
iframe = $( '<iframe " src="' + src + '" width="100%" height="100" scrolling="no" frameborder="1"><\/iframe>' )
.appendTo( '#zshop' );

//alert(src);

// Setup a callback to handle the dispatched MessageEvent event. In cases where
// window.postMessage is supported, the passed event will have .data, .origin and
// .source properties. Otherwise, this will only have the .data property.
$.receiveMessage(function(e){

// Get the height from the passsed data.
var h = Number( e.data.replace( /.*if_height=(\d+)(?:&|$)/, '$1' ) );

if ( !isNaN( h ) && h > 0 && h !== if_height ) {
// Height has changed, update the iframe.
iframe.height( if_height = h );
}

console.log("beskjed mottat og høyden vi fikk er: " + h);
var currentDate = new Date()
console.log("tid parent: " + currentDate.valueOf())

// An optional origin URL (Ignored where window.postMessage is unsupported).
}, 'http://oslsrv01' );

// And for good measure, let's send a toggle_content message to the child.
$( '<a href="#">Show / hide Iframe content - dette sender beskjeden til iframen.<\/a>' )
.appendTo( '#nav' )
.click(function(){
$.postMessage( 'toggle_content', src, iframe.get(0).contentWindow );
return false;
});

});
</script>
</head>

<body style="background-color:orange">
<div id="nav"></div>

<div id="test">

<div id="zshop" style="border: 3px solid red"></div>

</div>

dette er slutten
</body>

child

<html>
<head>
<script language="javascript" src="jquery-1.4.2.min.js" type="text/javascript"></script>
<script language="javascript" src="jquery.ba-postmessage.js" type="text/javascript"></script>
<script>
$(function(){
// Get the parent page URL as it was passed in, for browsers that don't support
// window.postMessage (this URL could be hard-coded).
var parent_url = decodeURIComponent( document.location.hash.replace( /^#/, '' ) ),
link;

// The first param is serialized using $.param (if not a string) and passed to the
// parent window. If window.postMessage exists, the param is passed using that,
// otherwise it is passed in the location hash (that's why parent_url is required).
// The second param is the targetOrigin.
function setHeight() {
$.postMessage({ if_height: $('body').outerHeight( true ) }, parent_url, parent );
//alert("barn sender beskejd og høyden som sendes er: " + $('body').outerHeight( true ));
console.log("barn sender beskejd og høyden som sendes er: " + $('body').outerHeight( true ));
var currentDate = new Date()
console.log("tid child: " + currentDate.valueOf())
};

// Bind all this good stuff to a link, for maximum clickage.
link = $( '<a href="#">Show / hide content<\/a>' )
.appendTo( '#nav' )
.click(function(){
$('#toggle').toggle();
$('#stor').toggle();
setHeight();
return false;
});

// Now that the DOM has been set up (and the height should be set) invoke setHeight.
setHeight();

// And for good measure, let's listen for a toggle_content message from the parent.
$.receiveMessage(function(e){
if ( e.data === 'toggle_content' ) {
link.triggerHandler( 'click' );
}
}, 'http://oslsrv03' ); //http://127.0.0.1
});
</script>
</head>

<body style="background-color:white;border: 3px solid black">
<div id="nav"></div>

<div id="toggle">

nå fra oslsvr03
<div style="height:200px; background-color:blue;"></div>
</div>

<div id="stor" style="height:800px; background-color:orange; display: none">Denne skal ikke vises hele tiden!!!</div>

</body>

最佳答案

忘记将文档类型添加到 iframe 内容中。现在它在我的测试用例中就像一个魅力。在现实世界的场景中有点不那么迷人,但我会看看我在那里做了什么......

关于Jquery postmessage 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4135367/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com