【问题标题】:Get innerText from iframe from parent从父级的 iframe 获取 innerText
【发布时间】:2018-05-08 14:56:31
【问题描述】:

您好,我正在向我的页面添加一些 iframe。 iframe 仅包含一个值,我想从父级获取它。我尝试了许多关于堆栈溢出的答案,但没有一个对我有用。下面我附上了图片,这样您就可以看到页面中包含的 iframe 是如何的。我想获取红框中的值,以便以后使用。

代码:

  var graphUrls = tmpSource.getGetFeatureInfoUrl(
    graphCoor, viewResolution, 'EPSG:3857', {'INFO_FORMAT': 'text/html'});
  var frr = document.createElement("iframe");
  frr.onload = function(){
    var jjj = $("iframe body a").text()
    var kkk = $("iframe body #ras-val").text()
    console.log("jjj ", jjj)
    console.log("kkk ", kkk)
  };
  frr.id = sourceParams.year + "-" + sourceParams.month + "-" + sourceParams.day;        
  frr.src = graphUrls
  document.body.appendChild(frr);

【问题讨论】:

  • 你试过使用 jQuery 吗? $("iframe body a").text() ?
  • 或 $("iframe body #ras-val").text()?
  • 嘿,您的解决方案只返回空字符串。我也试过 $("#"+String(frames[i].id)).contents().find("a")。这将返回一个对象,该对象的 innerText 值存储在某个深处但仅在 Edge 中,在 Chrome 中这个字符串也是空的吗?当我尝试访问该值时,我的 iframe 是否可能尚未加载?那么为什么在不同的浏览器中有不同的行为呢?如果是这种情况,我将如何等到加载 iframe?
  • 您使用的是 document.ready 还是 window.ready?如果您使用过 document.ready,请尝试将其更改为 window.ready。
  • 不,尝试使用 iframe.onload = function... 我更新了我的问题,以便您了解我在做什么以及如何做。

标签: javascript html iframe innertext


【解决方案1】:

如果返回的 url 与您的主文档来自同一域,并且仅在这种情况下,
那么您可以将 iframe 的 contentDocument 作为 $(selector, context) 的第二个参数传递。

// frame is you iframeElement
$('#ras-val', frame.contentDocument).text()

As a fiddle 因为 StackSnippet 的 null 来源框架不允许我们访问内部框架...

请注意,选择器将与此上下文相关,因此您不会传递"iframe body a",而只会传递"body a"

如果 url 不是来自同一个域,那么出于安全原因,您的前端代码不允许访问此文档。

【讨论】:

  • 很好,这很有效,我实际上将 iframe 中的所有内容都作为字符串。还有一件事:如果我想访问 iframe 脚本中的 var rasVal 的值怎么办?我该怎么做?感谢您的帮助!
  • @Alešinar 如果此变量已在全局范围内声明,则它将附加到 Window 对象,您可以使用 frame.contentWindow 检索该对象。如果它已在作用域函数中定义,则无法检索它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多