Как получить HTML-элементы из тега объекта? - PullRequest
19 голосов
/ 10 января 2012

Я использую тег объекта для загрузки фрагмента html на странице html.

Мой код выглядит примерно так:

<html><object data="/html_template"></object></html>

Как и следовало ожидать, после загрузки страницы некоторые элементы добавляются между тегами объекта. Я хочу получить эти элементы, но не могу получить к ним доступ.

Я пробовал следующее $("object").html() $("object").children() $("object")[0].innerHTML

Ничто из этого не похоже на работу. Есть ли другой способ получить эти элементы?

EDIT:

Более подробный пример:

рассмотрим это

<html><object data="http://www.YouTube.com/v/GGT8ZCTBoBA?fs=1&hl=en_US"></object></html>

Если я пытаюсь получить html внутри объекта, я получаю пустую строку.

http://jsfiddle.net/wwrbJ/1/

Ответы [ 8 ]

15 голосов
/ 27 февраля 2015

Пока вы размещаете его в одном домене, вы можете делать следующее:

HTML

<html>
    <object id="t" data="/html_template" type="text/html">
    </object>
</html>

JavaScript

var t=document.querySelector("#t");
var htmlDocument= t.contentDocument;
11 голосов
/ 04 мая 2012

innerHTML предоставит доступ к html, который находится между <object> и </object>.Спрашивается, как загрузить html-объект объектом в создаваемом им окне / фрейме (это не имеет ничего общего с кодом между тегами open и close).

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

2 голосов
/ 02 октября 2017

Нет, получить доступ к фрейму перекрестного происхождения невозможно!

0 голосов
/ 27 апреля 2018

Я знаю, что это старый вопрос, но здесь идет ...

Я использовал это на личном веб-сайте и в конечном итоге реализовал его в некоторых рабочих проектах, но именно так я подключаюсь к домену svg.Обратите внимание, что вам нужно запустить это после загрузки тега объекта (чтобы вы могли запустить его с помощью функции загрузки).Это может потребовать адаптации для элементов, не относящихся к svg.

function hooksvg(elementID) { //Hook in the contentDocument of the svg so we can fire its internal scripts
   var svgdoc, svgwin, returnvalue = false;
   var object = (typeof elementID === 'string' ? document.getElementById(elementID) : elementID);
   if (object && object.contentDocument) {
      svgdoc = object.contentDocument;
   }
   else {
      if (typeof object.getSVGDocument == _f) {
         try {
            svgdoc = object.getSVGDocument();
         } catch (exception) {
            //console.log('Neither the HTMLObjectElement nor the GetSVGDocument interface are implemented');
         }
      }
   }
   if (svgdoc && svgdoc.defaultView) {
      svgwin = svgdoc.defaultView;
   }
   else if (object.window) {
      svgwin = object.window;
   }
   else {
      if (typeof object.getWindow == _f) {
         try {
            svgwin = object.getWindow();//TODO look at fixing this 
         }
         catch (exception) {
            // console.log('The DocumentView interface is not supported\r\n Non-W3C methods of obtaining "window" also failed');
         }
      }
   }
   //console.log('svgdoc is ' + svgdoc + ' and svgwin is ' + svgwin);
   if (typeof svgwin === _u || typeof svgwin === null) {
      returnvalue = null;
   } else {
      returnvalue = svgwin;
   }
   return returnvalue;
};

Если вы хотите получить элементы символа из dom для svg, ваша функция загрузки может выглядеть следующим образом:

function loadedsvg(){
   var svg = hooksvg('mysvgid');
   var symbols = svg.document.getElementsByTagName('symbol');
}
0 голосов
/ 24 июля 2017

ОБНОВЛЕНО

Я использовал эту строку Javascript для изменения значения входного файла, хранящегося внутри iFrame,

document.getElementById('iframeID').contentWindow.document.getElementById('inputID').value = 'Your Value';

Ссылка: https://stackoverflow.com/a/14451440/3452102

0 голосов
/ 17 августа 2016

Вы можете использовать следующий код для чтения данных объекта, когда он полностью загружен и находится в том же домене:

HTML-

<html>
<div class="main">
<object data="/html_template">
</object>
</div>
</html>

Jquery-

$('.main object').load(function() {
    var obj = $('.main object')[0].contentDocument.children;
    console.log(obj);
});

Надеюсь, это поможет!

0 голосов
/ 10 января 2012

Вот пример кода, который работает.Не уверен, в чем проблема с вашим кодом.

<html>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
 <script type="text/javascript">
    $(document).ready(function(){
            var k = $("object")[0].innerHTML;
            alert(k);
            $("object")[0].innerHTML = "testing";
        });
 </script>
<object data="/html_template">hi</object>
</html>
0 голосов
/ 10 января 2012

Попробуйте это:

// wait until object loads
$('object').load(function() {
    // find the element needed
    page = $('object').contents().find('div');
    // alert to check
    alert(page.html());
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...