我有一个带有 iFrame 的 html 页面,我想从中读取一些变量。它基本上是一张地图,我想从中检索纬度和经度值。
我一直在使用 Adobe AIR,并且尝试从 innerHTML、contentWindow 中检索值,但仍然无法使其正常工作。
有什么好方法可以完成这项工作吗?
浏览器安全模型禁止任何跨域流量/通信。如果我们处理不同的子域,规则可以放宽到顶级域。但最终,你没有追索权。
如果您的应用程序需要跨域边界进行通信,那么通过后端通常是您最好的选择。如果您不控制 iframe 中的内容,您通常会很不走运。仅供参考,谷歌地图确实提供了一个 API 来使用他们的应用程序。http://code.google.com/apis/maps/index.html
在跨域通信的情况下,非应用程序沙箱桥的应用程序工作。
谢谢各位回复。。
您必须使用应用程序到非应用程序沙箱桥接。这将允许您在两个区域(iframe 和一般)之间进行通信。看看这里http://www.adobe.com/devnet/air/ajax/quickstart/sandbox_bridge.html
您可以使用 jQuery 访问 iframe 中的内容。
<iframe id="iframeId" ...> .... <div id='someData'>data</div> ....</iframe>
$('#iframeId').contents().find('#somedata').html(); // returns data
谢谢各位回复,
@svend:“通过后端”到底是什么?我明白了。我确实控制了 iFrame 中的内容,该 iFrame 位于另一个域中。
@Webber:感谢那个链接韦伯......看起来它会为我工作......我会试试......
我不得不这样做:
1- 在包含 iframe 的文件中添加隐藏输入,只要用户更改它们,它们就会在其中保存 lng 和 lat。
2-在js上创建这个函数:
function getFrameWindow(frameId) {
var frame = document.getElementById(frameId);
var result = null;
if (frame.contentDocument) {
// For NS6
result = frame.contentDocument.window || frame.contentDocument.defaultView;
} else if (frame.contentWindow) {
// For IE5.5 and IE6
result = frame.contentWindow;
} else if (frame.document) {
// For IE5
result = frame.document.window;
}
return result;
}
3-使用包含 iframe 的 javascript 中的此代码:
getFrameWindow("iframe").document.getElementById("lat").value