- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我发现我可以通过 file://
上的页面和远程主机上托管的 iframe 使用 iframe 的 contentWindow 属性进行跨域通信。
例如,在设备上,我在 url 文件中有一个 html 页面://.../index.html 加载 cordova 并包含一个 iframe:
<script type="text/javascript" src="cordova.js"></script>
<iframe id="appframe"></iframe>
在此页面上,我可以执行加载 iframe 的 javascript 并在 iframed 页面中保存对象的引用,如下所示:
var iframe = document.getElementById("appframe");
iframe.onload = function(){
iframe.contentWindow.cordova = window.cordova;
}
iframe.src = "http://www.example.com/appframe.html";
现在在 iframe 内的页面上,http://www.example.com/appframe.html ,我可以执行 cordova 调用,例如:
cordova.exec(null, null, "StatusBar", "hide", []);
这出乎意料地有效,调用了 StatusBar cordova 插件的原生层并隐藏了状态栏。
我的问题是:
这是否可以安全使用,或者是一种在未来版本的浏览器中不起作用的 hack?
我在 iOS 9 和 Android 5 设备上对其进行了测试。
最佳答案
我相信在框架之间进行通信的更安全的方法是 postMessage
,如 MDN 中所述。 , 以不同的方式执行可能会导致设备之间的不一致(请记住 android 是多么的碎片化以及与 4.3 及更低版本的向后兼容性是多么痛苦)
因此,您可以获取 iFrame 元素,然后发布类似这样的消息
otherWindow.postMessage(InfoToSend, "*");
以同样的方式,您可以在框架内收听该事件:
window.addEventListener("消息", receiveMessage, false);
这不会导致跨框架问题,这将是更安全的信息传递方式,坏消息是您将无法传递 window.cordova
实例,因此您将需要在 iFrame
和 window.top
框架之间建立对话。
关于javascript - Cordova跨域文件://iframe contentwindow communication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33474766/
考虑如下 HTML 文档 Furtheron 考虑如下 JavaScript document.addEventListener( 'DOMContentLoaded', function ( e
function getDef() { document.getElementById("defCanvas").innerHTML=document.getElementById("inv
我在 www.domain.com 上有一个页面,在 sub.domain.com 上有另一个页面。 sub.domain.com 将显示在 iframe 中的 www.domain.com 上。我试
我有一个像这样的 HTML 对象元素: Error: could not embed search results. 我还有这个 javascript 函数(添加了alert()调用以进行调试):
我正在尝试将 hotmail 安装到我的 mailto 处理程序: 这是通过网页范围内的代码完成的: navigator.registerProtocolHandler('mailto','http:
我的 javascript 有一个问题,就是根据内容调整 iFrame 的大小。我让它在其他地方工作,但对于这个例子,它抛出了一个错误。使用以下代码,body 为 null,因此无法获取 scroll
当我尝试我的代码时: Testing.html - function find() { var iframeEl = document.getElementById('love'); if ( if
我正在使用一些遗留代码,并且正在寻找一种安全的方法来处理以下情况: 我有一个显示产品选择页面的 iframe。我需要向此 iframe 传递带有查询字符串的回调函数的名称。 在 iframe 中,我从
我发现我可以通过 file:// 上的页面和远程主机上托管的 iframe 使用 iframe 的 contentWindow 属性进行跨域通信。 例如,在设备上,我在 url 文件中有一个 html
我使用以下代码动态创建一个 iframe。 var iframe_jquery = $("") .addClass("foo") .appendTo(container); // co
我正在尝试使用 React.js 制作一个富文本编辑器,我正在使用 iframe 并将 designMode 属性设置为“ON”。我想在单击按钮时将所选文本设为粗体。我想使用 execCommand(
我有一个包含多个 iFrame 的网页,例如6我希望能够在一次调用中打印其中 2 个帧,而不是获取每个帧的 contentWindow 然后调用: parent.iFrame1.focus(); pa
我想设置 iframe 的高度与其内容相匹配。但是即使将 iframe.contentWindow 放入 .load() 中,它也会返回 undefined。这是代码: $(document).rea
这是有问题的javascript代码 var tmpIframe, url; url = "http://local.custom.com:10000/simple.html"; tmpIframe
我正在使用这段代码,它源于 here和 here . $('#my_button').on('click', function (e) { var iframe = document.crea
这是我目前为止所拥有的,使用这篇文章: Make iframe automatically adjust height according to the contents without using
我正在尝试修改我访问权限有限的网站上的一些 CSS。我已被允许在服务器上创建页面,但无法修改网站上其他 PHP 生成的页面。 我正在探索将 CSS 注入(inject) iframe 中。我首先隐藏
我试图在以下代码中访问 iframe 的 contentDocument 和 contentWindow。但它们都是空的。 var iframe = document.createElemen
如何在 Chrome 中调用以下内容? iframe.contentWindow.document 最佳答案 Chrome 实际上支持 iframe.contentWindow.document,但是
我正在尝试调试 iframe 的 contentWindow,但每次我尝试在 chrome 59 上查看 contentWindow 对象时dev-tools 页面崩溃。 将 contentWindo
我是一名优秀的程序员,十分优秀!