TL; DR;невозможно напрямую изменить содержимое внутри iframe, принадлежащего другому источнику, которым вы не владеете.
Если ваш iframe и хост имеют одинаковое происхождение (домен), взаимодействие между ними легкопросто получите доступ к объекту document
, чтобы получить элемент.Пример использования jQuery:
- Чтобы скрыть кнопку на элементе хоста из iframe, используйте:
window.parent.jQuery('button').hide()
. - Чтобы скрыть кнопку элемента iframe от хоста, используйте:
jQuery('iframe')[0].contentWindow.jQuery('button').hide()
HOWEVER , если хост и фрейм не имеют одинакового происхождения, взаимодействие между каждым из них строго ограничено.Вы не можете указать определенную операцию непосредственно с хоста на javascript iframe window
или document
, и наоборот.Исходя из этого, можно с уверенностью сказать, что прямой доступ к элементу DOM iframe с хоста определенно невозможен.
Объяснение о Доступ к API-интерфейсу сценария общего происхождения из MDN .
API-интерфейсы JavaScript, такие как iframe.contentWindow, window.parent, window.open и window.opener, позволяют документам напрямую ссылаться друг на друга.Когда два документа не имеют одинакового происхождения, эти ссылки предоставляют очень ограниченный доступ к объектам Window и Location, как описано в следующих двух разделах.
Для дальнейшей связи между документами из разных источников, используйте window.postMessage.
Вы можете использовать функцию window.postMessage
и прослушиватель событий "message"
для отправки и получения сообщения между хостом и iframe (и наоборот).В вашем случае вам нужно будет отправить сообщение с хоста, чтобы поручить фрейму скрыть кнопку.Затем на стороне получателя (iframe) найдите нужную кнопку, затем скройте ее. Но этот метод работает, только если вы владеете этими двумя источниками , вам нужно объявить событие "message"
в конце iframe, и так как ваш источник iframe - drive.google.com
, который, я полагаю, вы не являетесь владельцем,тогда это определенно невозможно.
Больше объяснений: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage