Что делает каждый встроенный объект contentDocument «уникальным», даже имея два (или более) экземпляров одного и того же источника объекта? - PullRequest
0 голосов
/ 19 февраля 2019

Я поместил несколько экземпляров одного и того же объекта на HTML-странице.В моем случае я имею дело с SVG, и у меня есть что-то вроде этого:

<object data="same.svg" type="image/svg+xml"></object>
<object data="same.svg" type="image/svg+xml"></object>
<object data="same.svg" type="image/svg+xml"></object>

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

<script type="text/javascript"><![CDATA[
  async function compare_test(){
    await (new Promise(resolve => setTimeout(resolve,2000)));
    let objects = window.parent.document.getElementsByTagName("object");
    for (let i=objects.length-1; i>=0; i--){
      if (objects[i].contentDocument == this.document){
        console.log("matching object found:");
        console.log(objects[i]);
        break;
      }
    }
  }
]]></script>

К моему изумлению, я заметил, что все работает хорошо, и сопоставляемый объект, кажется, всегда будет правильным!Мне интересно, как это возможно?Итак ... существует ли какой-нибудь механизм браузеров, который делает каждый документ содержимого объектов на странице "уникальным"?Что это?

1 Ответ

0 голосов
/ 20 февраля 2019

Это не конкретная механика браузера.Просто браузер на самом деле проще, чем вы думаете.

Тот факт, что три встроенных «документа» происходят из одного файла, не имеет значения.Это все еще три разных объекта, потому что вы явно указали три тега объекта.Каждый из трех экземпляров SVG интерпретируется (выполняется / отображается) независимо.Может быть, какой-то скрипт внутри SVG генерирует случайные формы?Тогда у вас будет три разных изображения.Вы должны понимать, что «документ» - это не просто файл, из которого он взят.Документ содержит все состояние выполнения файла (и, в конечном итоге, его внутренние сценарии).Так и должно быть.

Конечно, браузер, безусловно, выбирает "same.svg" только один раз из-за кэширования.Но, тем не менее, он выполняется три раза, и, следовательно, должно быть три разных документа содержимого (каждый со своим собственным определенным состоянием).

Так что не может быть никакой двусмысленности с методом, который вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...