Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вызов функции вложенного файла (https://javascript.ru/forum/events/48735-vyzov-funkcii-vlozhennogo-fajjla.html)

sasha-js 15.07.2014 12:46

Вызов функции вложенного файла
 
Есть html-файл bar.html
Код:

<html>
 <head>
  <script type="text/javascript">
  function f()
  {
    progressbar.value="50";
  }
  </script>
 </head>
 <body>
  <progress id="progressbar" value="10" max="100"></progress>
 </body>
</html>

Есть второй HTML-файл, который включает в себя первый, например через <object>:
Код:

<html>
 <head>
  <script type="text/javascript">
  function f()
  {
    document.getElementById('leftcol').ownerDocument.documentElement.f();
  }
  </script>
 </head>
 <body>
  <object id="leftcol" type="text/html" data="bar.html"></object>
  <input type="button" onclick="f()" value="changeState"/>
 </body>
</html>

Каким образом вызвать функцию вложенного файла??
document.getElementById('leftcol').ownerDocument.d ocumentElement.f(); -- так не работает

Возможно включить html файл другим способом, главное без <iframe>


Заранее спасибо за помощь!

Sweet 15.07.2014 13:17

Во-первых, ownerDocument - это документ "владельца". Т.е.
<object id="leftcol" type="text/html" data="bar.html"></object>
<script>
document.getElementById('leftcol').ownerDocument == document; // true
</script>

Получить документ "bar.html" можно так:
document.getElementById('leftcol').contentDocument

Во-вторых, documentElement - это ссылка на html-элемент. Так что, так и не должно работать.

Попробуй так:
function f() {
    document.getElementById('leftcol').contentDocument.defaultView.f();
}

sasha-js 15.07.2014 15:16

Sweet, спасибо за ответ.

Но document.getElementById('leftcol').contentDocument выдает ошибку:

SecurityError: Failed to read the 'contentDocument' property from 'HTMLObjectElement': Blocked a frame with origin "null" from accessing a cross-origin frame.


Возможно ли реализовать вызов скриптов из внешнего загруженного файла без изменения политик безопасности?

Sweet 16.07.2014 01:41

Цитата:

Сообщение от sasha-js
Возможно ли реализовать вызов скриптов из внешнего загруженного файла без изменения политик безопасности?

Если что-то запрещено политикой безопасности, и это можно обойти, не меняя правил политики безопастости, то это дыра безопасности, не?:)
Если ты это делаешь по протоколу file:, то работать "из коробки" не будет. Может можно как-то подшаманить, я хз.


Часовой пояс GMT +3, время: 19:00.