Google Chrome не принимает .contentDocument или .contentWindow! - PullRequest
3 голосов
/ 17 марта 2011

Когда я пробую свой код:

Testing.html -

<script language="JavaScript" type="text/javascript">
function find() { 
var iframeEl = document.getElementById('love');
if ( iframeEl.contentDocument ) {
    var form = iframeEl.contentDocument.document.getElementById('hi').getAttribute('href');
    alert(form)
} else if ( iframeEl.contentWindow ) {
    var form = iframeEl.contentWindow.document.getElementById('hi').getAttribute('href');
    alert(form)
} 
  }
</script>
<body onload="find()">
<iframe name="lovez" src="frame.html" id="love"><a href="http://www.google.com" id="hi">Testingz</a></iframe>
</body>

Frame.html -

<a href="http://www.google.com" id="hi">Testing</a>

Оно не вернет окно предупреждения. Однако в Internet Explorer это будет. Я искал в Интернете, пробовал все примеры и не могу найти простой пример, который будет работать в Google Chrome. Я что-то не так делаю или это просто Google Chrome?

Ответы [ 3 ]

4 голосов
/ 23 апреля 2015

Я заметил, что и contentDocument, и getSVGDocument (для объектов svg из файлов svg) будут работать нормально, если код получен с веб-сервера, но когда я копирую код в локальный файл, он будетне работает.

Вот пример ссылки с кодом, который я скопировал, который работает в Интернете, но не с моего диска.

Вот решение Я только что нашел из Chrome (спасибо Artem S ), т.е. с помощью флага --allow-file-access-from-files.

1 голос
/ 17 марта 2011

Попробуйте без .document

var form = iframeEl.contentDocument.getElementById('hi').getAttribute('href');

вместо

var form = iframeEl.contentDocument.document.getElementById('hi').getAttribute('href');
0 голосов
/ 07 марта 2016

Ответ @IsraelGav является правильным в том смысле, что эта проблема возникает, когда к коду обращаются из локального файла, а не при доступе с веб-сервера.Это также правильно в том смысле, что использование флага --allow-file-access-from-files может позволить Chrome получить доступ к локальному файлу.

Однако при этом здесь отсутствует важная проблема безопасности.Обе проблемы, а также возможное альтернативное решение были первоначально описаны в этом другом ответе SO @ @sszaczky .Чтобы подвести итог альтернативного решения: В Windows установите http-сервер (npm install -g http-server) и запустите http-server из каталога вашего проекта.В Mac / Linux запустите python -m SimpleHttpServer из вашего локального каталога.Теперь вы можете получить доступ к локально размещенному веб-сайту в вашем браузере.В Windows мне пришлось использовать localhost:8080, в то время как на Mac мне пришлось использовать localhost:8000.

Кстати, это проблема не только для Chrome (v49.0), но и для Opera (v35).0), как на Windows, так и на Mac.

...