- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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/
我正在掌握 Chrome 自定义选项卡中可用的功能,我很想知道如何在自定义选项卡和应用程序本身之间进行通信。我可以在 CustomTabsSession 中看到有类似 requestPostMessa
我正在创建 Cypress e2e 测试,但是我们的应用程序作为父页面顶部的模态 (iframe) 打开。由于 Cypress 不支持 iframe,我决定尝试“独立”运行应用程序。但是,在启动应用程
显然,使用 window.postMessage是 preferred way在所有现代浏览器中通过 window.setTimeout(fn, 0) 对异步 javascript 回调进行排队。我找
我有 2 个应用程序,一个是隐藏窗口(“hW”),另一个是控制台应用程序(“CA”),来自我想向硬件发送命令。在控制台应用程序中,我得到了硬件句柄,这是一个问题:如果我正在运行: PostMessag
所以我在 Html5 Demos 上摆弄 Html5 PostMessage 示例我创建了一个示例 jsfiddle看看我是否理解它是如何协同工作的。 该演示使用了 document.getEleme
我有一个包含 iFrame 的基本 HTML 页面。当父级加载并且 iFrame 在其中时,iFrame 执行以下 javascript: myParent = window.top; if (win
我有以下脚本 父页面(pair_pixel_filter.php): window.addEventListener("message", function(e) { $('
我遇到的问题是,在注册服务 worker 后,navigator.serviceWorker.controller 始终为 null。 我想使用 postMessage 向 service worke
我正在使用 window.postMessage 函数与 Angular Controller 通信 iframe https://developer.mozilla.org/en-US/docs/W
我在关注 this本地消息传递指南,但现在我陷入了停滞。 Firefox 上的开发者控制台不断给我同样的错误: “尝试在断开连接的端口上发布消息”以及之前的“Webconsole 上下文已更改”。 我
有一个问题我无法解决。我在 Delphi 中创建了两个服务应用程序并尝试在其中发布消息。当然,此类应用程序中没有窗口,PostMessage 需要一个窗口句柄参数来发送消息。 因此,我使用 Alloc
到目前为止,我只看到过关于 postmessage 的教程,其中一个窗口发送一种消息,而另一个窗口仅以一种方式解释消息。 如果我想在窗口之间进行许多不同类型的交互怎么办,postmessage 可以处
我有一个带有视频 API 的 HTML 5 简单表单,我想在用户单击提交按钮时播放视频 这里是演示 HTML 表单输入。 HTML 5
我不知道该怎么办。我尝试了来自不同来源的几个示例代码,我在不同的浏览器(从 Chrome 9 到 FF 4)中尝试了它们,但似乎仍然没有任何东西可以与“postMessage”功能一起使用。JS 控制
我正在尝试将消息从父窗口发布到它打开的子窗口。然而,该消息并未被发布。 在父窗口脚本中: function editAnnotation(annotKey){ var annotString
我正在使用 var handle = window.open(url, name, options) 创建一个弹出窗口。该窗口包含许多允许用户导航的链接。用户完成导航后,可以单击按钮来表示已完成。当用
我有一个包含表单的 iframe,在该 iframe 中我有以下内容: // Send a message to the parent window window.parent.postMessag
我正在尝试将消息从父窗口发布到它打开的子窗口。然而,该消息并未被发布。 在父窗口脚本中: function editAnnotation(annotKey){ var annotString
我正在尝试使用 Ben Almans jquery postmessage调整 iFrame 的大小。我或多或少地将他的示例与不同的服务器和动态内容一起使用。 我也在该网站上发布了一个问题,但这可能是
我正在尝试使用实验性 Canvas 功能 - offscreenCanvas。 index.html const canvas = document.queryS
我是一名优秀的程序员,十分优秀!