Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.08.2017, 20:04
Новичок на форуме
Отправить личное сообщение для Winexcel Посмотреть профиль Найти все сообщения от Winexcel
 
Регистрация: 07.08.2017
Сообщений: 5

Получение абсолютных координат элемента из iframe
Здравствуйте! Пытаюсь получить координаты элемента картинки с этой страницы https://learn.javascript.ru/drag-and-drop-objects из фрейма "js.cs /" следующим кодом:
document.querySelector('img');


Всё прекрасно работает:

Пробую получить координаты используя функцию getBoundingClientRect:
document.querySelector('img').getBoundingClientRect();

В ответе получаю:
ClientRect {top: 8, right: 72, bottom: 72, left: 8, width: 64…}

Что соответсвует действительности относительно вложенного фрейма "js.cs /". Вопрос заключается в следующем:
Как получить координаты этого же элемента относительно самого главного фрейма?(top). И возможно ли это вообще?

Последний раз редактировалось Winexcel, 07.08.2017 в 20:07.
Ответить с цитированием
  #2 (permalink)  
Старый 07.08.2017, 20:20
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Winexcel,
У самого фрейма получить аналогичные координаты и сложить.
Ответить с цитированием
  #3 (permalink)  
Старый 07.08.2017, 20:25
Новичок на форуме
Отправить личное сообщение для Winexcel Посмотреть профиль Найти все сообщения от Winexcel
 
Регистрация: 07.08.2017
Сообщений: 5

Пытался найти способ как получить координаты самого фрейма но так и не нашел, подскажите пожалуйста как..
Сообщение от Rise Посмотреть сообщение
Winexcel,
У самого фрейма получить аналогичные координаты и сложить.
Ответить с цитированием
  #4 (permalink)  
Старый 07.08.2017, 20:29
Новичок на форуме
Отправить личное сообщение для Winexcel Посмотреть профиль Найти все сообщения от Winexcel
 
Регистрация: 07.08.2017
Сообщений: 5

Пробовал так(запуск из фрейма "js.cx /"):
window.frameElement.getBoundingClientRect();

Как результат:
window.frameElement.getBoundingClientRect();
VM8852:1 Uncaught TypeError: Cannot read property 'getBoundingClientRect' of null
    at <anonymous>:1:20
Ответить с цитированием
  #5 (permalink)  
Старый 07.08.2017, 20:35
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Winexcel,
Так выдели также как выделил картинку.
Ответить с цитированием
  #6 (permalink)  
Старый 07.08.2017, 20:45
Новичок на форуме
Отправить личное сообщение для Winexcel Посмотреть профиль Найти все сообщения от Winexcel
 
Регистрация: 07.08.2017
Сообщений: 5

Попрбовал следующее:
document.getElementsByTagName('iframe')[0].getBoundingClientRect();
ClientRect {top: 97.1875, right: 1142, bottom: 377.1875, left: 371, width: 771…}

Но нужно запускать скрипт именно из фрейма в котором находится элемент, возможно ли такое?
Сообщение от Rise Посмотреть сообщение
Winexcel,
Так выдели также как выделил картинку.
Ответить с цитированием
  #7 (permalink)  
Старый 08.08.2017, 04:26
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Winexcel,
Как работать с фреймами в консоли:
https://developers.google.com/web/to...cution-context
https://developer.mozilla.org/en-US/...g_with_iframes

Как получить координаты самого фрейма изнутри:
window.frameElement.getBoundingClientRect();
window.top.document.querySelector('iframe').getBoundingClientRect();
window.parent.document.querySelector('iframe').getBoundingClientRect();

Но с данным фреймом это не получится по причине разных доменов:
https://developer.mozilla.org/en-US/...w/frameElement
https://developer.mozilla.org/en-US/...-origin_policy

Последний раз редактировалось Rise, 08.08.2017 в 04:29.
Ответить с цитированием
  #8 (permalink)  
Старый 08.08.2017, 06:03
Новичок на форуме
Отправить личное сообщение для Winexcel Посмотреть профиль Найти все сообщения от Winexcel
 
Регистрация: 07.08.2017
Сообщений: 5

Спасибо, но у меня проблема именно в том что этот фрейм находится на другом домене, и мне нужно получить как-то его координаты ...А возможно ли как-то получить внутри этого фрейма id по которому я обращаюсь к нему из главного фрейма в массиве frames?
document.getElementsByTagName('iframe')[0].getBoundingClientRect();

В данном случае вложенный фрейм имеет id = 0.
Возможно ли как-то получить эту цифру в самом вложенном фрейме?
Или другой вариант который поможет идентифицировать этот фрейм в массиве frames.

Последний раз редактировалось Winexcel, 08.08.2017 в 06:09.
Ответить с цитированием
  #9 (permalink)  
Старый 08.08.2017, 16:32
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Winexcel,
Это возможно:
for (var id = 0; id < top.frames.length; id++) if (top.frames[id] == window) alert(id);

Но в консоле для удобства есть специальные ссылки для выбранных элементов:
$0.getBoundingClientRect();

https://developers.google.com/web/to...eference#0_-_4
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение доступа к Object.prototype внутри Iframe в IE8 dfionov Internet Explorer 12 22.07.2015 17:00
Не выходит добраться до элемента в iframe, возникает ошибка Tander Events/DOM/Window 4 12.10.2013 23:02
получение ссылки на iframe из содержимого в этом iframe mister_maxim Events/DOM/Window 5 15.02.2013 22:48
Получение Url страницы загруженной в iframe taraba4 Общие вопросы Javascript 40 05.01.2011 02:39
скрытый iframe определение видимости элемента в нем palermo Общие вопросы Javascript 1 29.01.2010 21:07