Вызов функции Javascript в дочернем iFrame с междоменным сайтом, но с тем же расположением JS-файла

#javascript #html #browser #iframe #cross-domain

#javascript #HTML #браузер #iframe #междоменный

Вопрос:

Я пытаюсь сделать следующее:

Основной документ вызывает функцию в iFrame, URL которой находится в другом месте, но функция Javascript, которую я пытаюсь вызвать, загружена из того же домена, что и основной документ.

Есть ли какой-либо способ сделать это?

Для уточнения:

  • Основной документ: http://www.main.com
  • Документ iFrame:http://www.example.com
  • Функция JS, которую я вызываю в iFrame, находится вhttp://www.main.com/js/script.js

Я получаю

 Permission denied to access property 'js_function'
  

При выполнении

 document.getElementById("iframe").contentWindow.js_function(n)
  

Ответ №1:

Даже если скрипт размещен на main.com , он выполняется в контексте example.com и, следовательно, считается частью example.com … и, следовательно, не имеет доступа к переменным или функциям в main.com окне. Вы можете обойти это с помощью различных связи (или вы можете игнорировать IE < 8 и использовать window.postMessage сам по себе).).

СМОТРИТЕ ТАКЖЕ: http://stevehanov.ca/blog/index.php?id=109

Ответ №2:

Я вижу, что вы делаете. Был «взлом», в котором использовались два iframe (если я правильно помню). И этот взлом, и тот, который вы упоминаете здесь, ужасно неясны, и я не удивлюсь, если они были заблокированы сознательно.

Лучшее исправление, которое я могу придумать, это загрузить код для js_function() в главном окне (за пределами iframe).

Можете ли вы более конкретно рассказать о том, что делает JS-код? Возможно, я смогу помочь лучше.

Комментарии:

1. Не помогает то, что файл Javascript, к которому я пытаюсь получить доступ, находится в том же домене, что и основной документ?

2. Нет, это не так. Есть много причин, почему нет. Если вы помните, как работает XSS, они пытаются максимально ограничить внедрение. Отключение защиты только потому, что содержимое пришло из другого места, представляет собой серьезный риск.

3. Как это можно принять за ответ? И XSS не имеет никакого отношения к происхождению скрипта. Реальное решение смотрите в моем ответе.

4. @Sean — Вы ожидали, что операция отправится в будущее (с 26 апреля), чтобы найти ответ, который вы написали 11 минут назад (2 мая)?

5. @Christian — Нет, я просто подумал, что это не должно было быть помечено как ответ в первую очередь 🙂

Ответ №3:

Используйте функцию RPC easyXDM, она сочетает XDM с RPC. Пример этого можно увидеть здесь:http://consumer.easyxdm.net/current/example/methods.html