【问题标题】:How access an object declared in another html file?如何访问在另一个 html 文件中声明的对象?
【发布时间】:2015-12-29 04:42:25
【问题描述】:

我正在导入使用 qgis2web<iframe> 中创建的地图。

 <iframe id="leaflet"
         src="/qgis/index.html"
         scrolling="no"
         frameborder="0"
         style="height: 100vh;width: 100%">
 </iframe>

我需要访问在 /qgis/index.html 文件内的 &lt;script&gt; 中声明的对象(地图)并修改它的一些属性。

我可以直接在 /qgis/index.html 文件中进行操作,但是因为这个文件夹是从另一个软件导出的,并且会经常被修改,我想在主文件中编写所有这些代码 index.html 文件,其中地图被导入到&lt;iframe&gt;

/qgis/index.html文件中的对象:

   <script>
   ...
   var map = L.map('map', {zoomControl:true, maxZoom:18, minZoom:15});
   ...
   </script>

...以及我想在 index.html 主文件中执行的修改:

    <script>
    var lat = -0.017;
    var lng = 0.015;
    var zoom = 16;

    map.setView([lat, lng], zoom);
    </script>

我尝试通过document.getElementById('map'); 进行操作,但没有成功。

编辑 1

我尝试了什么(不成功)

index.html:

<script>
  var lat = -0.017;
  var lng = 0.015;
  var zoom = 16;

  var map = document.getElementById("leaflet").contentWindow.map;
  map.setView([lat, lng], zoom);

EDIT 2工作,但 iframe 加载进入循环并无限期加载自身

index.html

<iframe id = 'iframeid'
    src="/qgis/index.html"
    scrolling="no"
    frameborder="0"
    style="height: 100vh;width: 100%"
    onload="on_load(this)">
</iframe>
...
<script type="text/javascript">

  function on_load(iframe) {
  try {
    var lat = -0.017;
    var lng = 0.015;
    var zoom = 16;

    var map = document.getElementById("iframeid").contentWindow.map;

    map.setView([lat, lng], zoom);
  } catch (e) {
    // This can happen if the src of the iframe is
    // on another domain
    alert('exception: ' + e);
  }
}
  </script>

【问题讨论】:

标签: javascript html iframe


【解决方案1】:

可能与this问题有关。

如果是,你应该试试var map = document.getElementById("iframeid").contentWindow.map;

编辑

我已经尝试过了,对我来说也是一样。 我发现在访问 iframe 中的变量之前我需要一点时间等待,因为当调用 javascript 时 iframe 尚未加载。

在我的超级简单示例中,我使用了 setTimeout 函数:(setTimeout(function(){alert(document.getElementById('iframe').contentWindow.text)}, 5000);),但最好的解决方案是定义一个 onLoad 事件,例如 this one

【讨论】:

  • 谢谢,我试过这个(见编辑),但也没有用。
  • 这就是问题所在:感谢您的链接,我添加了一个 onload 功能,现在它可以工作了。但是现在 iframe 正在循环自己,你知道如何处理这种行为吗?
【解决方案2】:

为什么不放弃 iframe 而使用 qgis2web 模板呢?

【讨论】:

  • 我对 Web 开发真的很陌生。该地图显示在基于Polymer 的网站中,iframe 是最简单的工作示例。因为地图会更新,我不想修改导出的代码感谢qgis2web。您所说的模板是通过qgis2web 创建的导出网站?
  • 啊,如果网页是使用其他框架构建的,那么 iframe 是最简单的方法。我正在使用的模板位于 qgis2web 的 /templates 子目录中,并允许您自定义插件的输出 HTML。但是,我不确定在这种情况下这是否适合您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2022-01-14
  • 1970-01-01
相关资源
最近更新 更多