2015-12-27 3 views
0

Я импортирую карту, созданную с использованием qgis2web внутри .Как получить доступ к объекту, объявленному в другом html-файле?

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

Мне нужно получить доступ к объекту (карта) объявленный в <script> внутри файла /qgis/index.html и изменить некоторые его свойство.

Я был в состоянии сделать это непосредственно в файл /qgis/index.html, а потому, что эта папка экспортируется из другого программного обеспечения, и будет часто изменять, Я хочу, чтобы написать весь этот код внутри основнойindex.html файл, где карта импортируется внутри

объект в файле /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');, но это не сработало.

EDIT 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> 
+0

Ваш вопрос является возможным дубликатом http: // stackoverflow.com/questions/926916/how-to-get-the-bodys-content-of-an-iframe-in-javascript – ViRuSTriNiTy

ответ

1

Может быть, это связано с this вопрос.

Если да, то вы должны попробовать с var map = document.getElementById("iframeid").contentWindow.map;

EDIT

Я попытался это и это то же самое для меня. Я обнаружил, что мне нужно немного времени, чтобы дождаться доступа к переменной в iframe, потому что, когда javascript называется iframe, он еще не загружен.

В моем супер простом примере я использовал функцию SetTimeout: (setTimeout(function(){alert(document.getElementById('iframe').contentWindow.text)}, 5000);), но лучшим решением будет определить событие OnLoad как this one

+0

Спасибо, я пробовал это (см. править), но это тоже не сработало. – JeanRene

+0

@JeanRene Я отредактировал свой ответ – Efesto

+0

В этом была проблема: я добавил функцию onload благодаря вашей ссылке, и теперь она работает. Но теперь iframe зацикливается, есть ли у вас какие-либо идеи о том, как возбуждать такое поведение? – JeanRene

0

Почему бы не отказаться от IFRAME и пользователю шаблон qgis2web вместо этого?

+0

Я действительно новичок в веб-разработке. Карта отображается на веб-сайте «Polymer», а «iframe» - самый простой рабочий пример. Поскольку карта будет обновлена, я не хочу изменять код, экспортированный с помощью 'qgis2web'. Шаблон, о котором вы говорите, - это экспортированный веб-сайт, созданный благодаря 'qgis2web'? – JeanRene

+0

Ах, если веб-страница построена с использованием какой-либо другой структуры, iframe - это самый простой способ. Шаблоны, которые я принимал, находятся в подкаталоге/templates qgis2web и позволяют настраивать выходной HTML-код плагина. Тем не менее, я не уверен, что в этом случае вы будете очень хорошо работать. –

Смежные вопросы