这个问题我相信将来会帮助数百人。但是脚本有点超出我的jQuery能力。我有jQuery基本技能但无法解决这个问题。
基本上我需要一个iFrame(托管在一个单独的域上)才能放在我的主网站上。我不想使用iFrame,但在我的情况下我别无选择!我需要将iFrame调整为iframe内部主体的高度。
目前正在使用Ben Alman jQuery postMessage plugin,看起来它可以做到这一点。但是当前的例子中有不必要的代码,它允许切换来调整iFrame的大小......
我不需要此切换,我只需要将iFrame调整为正确的iframe内容高度。我需要iframe高度来调整iframe内的身高变化。
这是我到目前为止所发现的......
我已将其放在iframe内容文件上 这是在服务器上:http://myiframecontent.com/
<script src="js/jquery.ba-postmessage.js" type="text/javascript"></script>
<script type="text/javascript">
$(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 );
};
// 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://mywebsite.com' );
});
</script>
我把它放在我的网站上
这是在服务器上:http://mywebsite.com/
<script src="js/jquery.ba-postmessage.js" type="text/javascript"></script>
<script type="text/javascript">
$(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://myiframecontent.com/#' + encodeURIComponent( document.location.href ),
// Append the Iframe into the DOM.
iframe = $( '<iframe " src="' + src + '" width="1060" height="1000" scrolling="no" frameborder="0"><\/iframe>' )
.appendTo( '#iframe' );
// 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 );
}
// An optional origin URL (Ignored where window.postMessage is unsupported).
}, 'http://myiframecontent.com/' );
// And for good measure, let's send a toggle_content message to the child.
$( '<a href="#">Show / hide Iframe content<\/a>' )
.appendTo( '#nav' )
.click(function(){
$.postMessage( 'toggle_content', src, iframe.get(0).contentWindow );
return false;
});
});
</script>
<div id="iframe" class="clear"></div>
目前上面是返回当前宽度1060px,但没有将我的iframe的高度更改为我的iframe中身体的高度?
此外,我的导航div#nav中的切换按钮也被添加到我的网站中。当我只需要高度时。
对此有任何帮助都很棒,因为我在网上找不到任何有用的例子,谢谢!
这是ba-postmessage.js脚本。
答案 0 :(得分:0)
由于您似乎想要删除链接,以下是iframe内容通过setInterval()
定期增加的工作示例。
这应该转到主网站/服务器A:http://mywebsite.com/
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Container on domain A (http://mywebsite.com/)</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="https://raw.github.com/cowboy/jquery-postmessage/master/jquery.ba-postmessage.js"></script>
<script type="text/javascript">
$(function(){
// Update this constant to match your IFrame (contents) URL (no '#' here please)
var if_url = 'http://myiframecontent.com/';
// 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).
var src = if_url + '#' + encodeURIComponent( document.location.href );
// Append the Iframe into the DOM.
var iframe = $( '<iframe " src="' + src + '" width="200" height="100" scrolling="no" frameborder="0"><\/iframe>' )
.appendTo( '#iframe' );
// 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 );
// Some user feedback if we want to...
$("#ticker").text("has been informed that IFrame contents height is now " + h + " and (re)acted accordingly.");
}
},
// An optional origin URL (Ignored where window.postMessage is unsupported).
if_url
);
});
</script>
</head>
<body>
<p>Container <span id="ticker"></span></p>
<div id="iframe"></div>
<p>Container</p>
</body>
</html>
这应该转到“iframe”网站/服务器B:http://myiframecontent.com/
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Contents on domain B (http://myiframecontent.com/)</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="https://raw.github.com/cowboy/jquery-postmessage/master/jquery.ba-postmessage.js"></script>
<script type="text/javascript">
$(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 );
};
// Let's increase height, and inform the parent document of new height, every 3 second
var i = 1;
function increaseHeight() {
$("#iframecontents").append("<p>Increase #" + i + "</p>");
i = i + 1;
// Now that the DOM has been set up (and the height should be set) invoke setHeight.
setHeight();
};
var timer = window.setInterval(increaseHeight, 3000);
});
</script>
</head>
<body>
<p>iframe starts here</p>
<div id="iframecontents"></div>
<p>iframe ends here</p>
</body>
</html>
请注意,在您的真实实现中,在您的IFrame(内容)页面中,您当然需要某种事件来挂钩并调用setHeight()
。