Невозможно получить доступ к содержимому iframe (политика того же происхождения)

Ослабление политики одинакового происхождения

В некоторых случаях политика одного и того же происхождения является слишком строгой, что создает проблемы для крупных веб-сайтов, использующих несколько поддоменов . Сначала для передачи данных между документами, находящимися в разных доменах , использовался ряд обходных приемов, таких как использование идентификатора фрагмента или свойства. Современные браузеры поддерживают несколько методов контролируемого ослабления политики одного и того же происхождения:

Заражение данных

Netscape Navigator кратко содержал функцию проверки на наличие заражения . Эта функция была экспериментально представлена ​​в 1997 году как часть Netscape 3. По умолчанию эта функция была отключена, но, если она была включена пользователем, она позволяла веб-сайтам пытаться читать свойства JavaScript окон и фреймов, принадлежащих другому домену. Затем браузер спросит пользователя, разрешить ли рассматриваемый доступ.

document.domain свойство

Если два окна (или фрейма) содержат сценарии, устанавливающие для домена одно и то же значение, политика одного и того же происхождения ослабляется для этих двух окон, и каждое окно может взаимодействовать с другим. Например, совместные скрипты в документах, загруженных с orders.example.com и catalog.example.com, могут установить свои свойства на «example.com», тем самым создавая впечатление, что документы имеют одно и то же происхождение, и позволяя каждому документу читать свойства Другие. Установка этого свойства неявно устанавливает для порта значение null, которое большинство браузеров будет интерпретировать иначе, чем порт 80 или даже неуказанный порт. Чтобы гарантировать, что доступ будет разрешен браузером, установите свойство document.domain на обеих страницах.

Эта концепция была представлена ​​как часть Netscape Navigator 3, выпущенного в 1996 году.

Совместное использование ресурсов между источниками

Другой метод ослабления политики одинакового происхождения стандартизирован под названием Cross-Origin Resource Sharing (CORS). Этот стандарт расширяет HTTP с новым заголовком запроса Origin и новым заголовком ответа Access-Control-Allow-Origin. Это позволяет серверам использовать заголовок для явного перечисления источников, которые могут запрашивать файл, или использовать подстановочный знак и разрешать запрос файла любым сайтом. Браузеры, такие как Firefox 3.5, Safari 4 и Internet Explorer 10, используют этот заголовок, чтобы разрешить HTTP-запросы с разными источниками с XMLHttpRequest, которые в противном случае были бы запрещены политикой того же происхождения.

Обмен сообщениями между документами

Другой метод, обмен сообщениями между документами, позволяет сценарию с одной страницы передавать текстовые сообщения сценарию на другой странице независимо от происхождения сценария. Вызов метода postMessage () для объекта Window асинхронно запускает событие «onmessage» в этом окне, вызывая любые определенные пользователем обработчики событий. Сценарий на одной странице по-прежнему не может напрямую обращаться к методам или переменным на другой странице, но они могут безопасно взаимодействовать с помощью этой техники передачи сообщений.

JSONP

Поскольку HTML- элементам разрешено извлекать и выполнять контент из других доменов, страница может обходить политику того же происхождения и получать данные JSON из другого домена, загружая ресурс, который возвращает полезную нагрузку JSONP. Полезные данные JSONP состоят из внутренних полезных данных JSON, обернутых предварительно определенным вызовом функции. Когда ресурс сценария загружается браузером, будет вызвана назначенная функция обратного вызова для обработки обернутой полезной нагрузки JSON.

WebSockets

Современные браузеры разрешают сценарию подключаться к адресу WebSocket без применения политики того же происхождения. Однако они распознают использование URI WebSocket и вставляют заголовок Origin: в запрос, который указывает источник сценария, запрашивающего соединение. Для обеспечения межсайтовой безопасности сервер WebSocket должен сравнить данные заголовка с белым списком источников, которым разрешено получать ответ.

Что пошло не так

Когда вы пытались перебрать , ваш скрипт / программа пытался получить доступ к с другим источником, используя JavaScript, что было бы огромным недостатком безопасности , если бы вы его достигли. Как упоминалось выше, браузеры политики одного источника блокируют сценарии, пытаясь получить доступ к с другим источником.

Две страницы имеют одинаковое происхождение, если протокол , порт (если указана одна) и хост одинаковы для обеих веб-страниц. Вы увидите, что это иногда называют (где «кортеж» — это набор из трех компонентов, которые вместе составляют единое целое). Возможно, протокол , домен , имя хоста и порт должны совпадать с вашим доменом, если вы хотите получить доступ желаемый кадр.

Обходной путь

Несмотря на то, что политика одного и того же происхождения блокирует доступ скриптов к содержимому сайтов с другим происхождением, если у вас есть обе страницы, вы можете обойти эту проблему, используя и его родственник событие для отправки сообщений между двумя страницами, например:

  • На главной странице:

    Второй аргумент возможно для обозначения отсутствия предпочтений в отношении происхождения пункта назначения. По возможности всегда следует указывать целевой источник, чтобы избежать разглашения данных, которые вы отправляете на любой другой сайт.

  • В вашем (содержится на главной странице):

Этот метод можно применять в оба направления, создание слушателя тоже на главной странице и получение ответов от фрейма. Та же самая логика также может быть реализована во всплывающих окнах и практически в любом новом окне, созданном на главной странице (например, используя ), без разницы.

Решение вопроса

Если веб-сервер активировал функцию безопасности, это может вызвать ошибку SecurityError на стороне клиента, как и должно быть.

2 Я не думаю, что здесь применимы X-Frame-Options — X-Frame-Options, определенные гостевой (встроенной) страницей, могут привести к тому, что родитель откажется загружать страницу, но, насколько я знаю, это не влияет доступ к javascript — даже с X-Frame-Options: *, я не думаю, что вы сможете получить доступ к DOM гостевой страницы другого происхождения с помощью javascript

Для меня я хотел реализовать двухстороннее рукопожатие, что означает: — родительское окно будет загружаться быстрее, чем iframe — iframe должен разговаривать с родительским окном, как только оно будет готово — родитель готов получить сообщение iframe и воспроизвести

этот код используется для установки белой метки в iframe с помощью [настраиваемого свойства CSS] код:iframe

родитель

естественно, вы можете ограничить источник и текст, с этим легко работать с кодом Я нашел этот пример полезным: [Междоменный обмен сообщениями с postMessage]

  • Я имею дело с проблемой сафари, когда документ в iframe выполняет свой JS позже, чем родительская страница, что приводит к тому, что сообщение отправляется раньше, чем документ в iframe прослушивает сообщения; что прямо противоположно тому, что делают chrome и firefox — вы тестировали свой код в сафари на ios? btw postMessage со вторым параметром значения «*» не совсем безопасно, вы всегда должны указывать домен
  • Ваш первый блок кода находится в iframe в родительском элементе или на странице, загружаемой в iframe?

Я хотел бы добавить специальную конфигурацию Java Spring, которая может повлиять на это.

В приложении веб-сайта или шлюза есть параметр contentSecurityPolicy

в Spring вы можете найти реализацию подкласса WebSecurityConfigurerAdapter

Браузер будет заблокирован, если вы не укажете здесь безопасный внешний контент.

Если у вас есть контроль над содержимым iframe, то есть если он просто загружается в настройках с перекрестным происхождением, например Amazon Mechanical Turk, вы можете обойти эту проблему с помощью атрибут для внутреннего html.

Например, для внутреннего html используйте html параметр (да — определен и относится к родительскому окну внутреннего элемента тела):

Во внутреннем html:

Я столкнулся с этой ошибкой при попытке встроить iframe и затем открыть сайт с помощью Brave. Ошибка исчезла, когда я перешел на «Shields Down» для рассматриваемого сайта. Очевидно, что это не полное решение, поскольку любой, кто посещает сайт с Brave, столкнется с той же проблемой. Чтобы действительно решить эту проблему, мне нужно было бы сделать одно из других действий, перечисленных на этой странице. Но по крайней мере теперь я знаю, в чем проблема.

  • Откройте стартовое меню
  • Введите windows + R или откройте «Выполнить»
  • Выполните следующую команду.
  • 9 Ужасно для всего, что не является быстрым и грязным тестом… и уже адрес в принятом ответе.
  • 3 Даже с командой это не работает, потому что Chrome таким образом избегает отключения веб-безопасности.

Обходной путь

Несмотря на то, что политика одного и того же происхождения блокирует доступ скриптов к содержимому сайтов с другим происхождением, если у вас есть обе страницы, вы можете обойти эту проблему, используя и его родственник событие для отправки сообщений между двумя страницами, например:

  • На главной странице:

    Второй аргумент возможно для обозначения отсутствия предпочтений в отношении происхождения пункта назначения. По возможности всегда следует указывать целевой источник, чтобы избежать разглашения данных, которые вы отправляете на любой другой сайт.

  • В вашем (содержится на главной странице):

Этот метод можно применять в оба направления, создание слушателя тоже на главной странице и получение ответов от фрейма. Та же самая логика также может быть реализована во всплывающих окнах и практически в любом новом окне, созданном на главной странице (например, используя ), без разницы.

Отключение политики одинакового происхождения в твой браузер

На эту тему уже есть несколько хороших ответов (я только что нашел их в Google), поэтому для браузеров, где это возможно, я свяжу относительный ответ. Однако помните, что отключение политики того же происхождения повлияет только на твой браузер. Кроме того, запуск браузера с отключенными настройками безопасности того же происхождения дает Любые доступ веб-сайта к ресурсам из разных источников, поэтому это очень небезопасно и НИКОГДА не следует делать, если вы точно не знаете, что делаете (например, в целях разработки).

  • Гугл Хром
  • Mozilla Firefox
  • Сафари
  • Опера
  • Microsoft Edge: невозможно
  • Microsoft Internet Explorer
  • 33 Любой другой ответ, который я нашел 1, 2, предполагает, что CORS / не применяется к iFrames, только к XHR, шрифтам, WebGL и . я верю это единственный вариант.
  • что, если происхождение: yousite.com.mysite.com? должны ли мы использовать вместо этого ===?
  • 3 @ccppjava вам не нужен ===, вы уже знаете, что тип переменной является строкой, поэтому === здесь бесполезен.
  • 4 @SabaAhang, просто проверьте , и если сайт отличается от имени хоста вашего домена, вы не можете получить доступ к этому фрейму.
  • 2 @ user2568374 расположение родительского фрейма.Если ваша рамка работает внутри другой сайт и вы проверяете, используя вы проверяете, содержит ли источник события адрес родительского кадра, который всегда будет , поэтому вы позволяете любой родитель с участием любое происхождение чтобы получить доступ к вашему фрейму, и это, очевидно, не то, что вы хотите делать. Более того, это тоже плохая практика, как я уже объяснял в комментариях выше.

Дополняя ответ Марко Бонелли: лучший текущий способ взаимодействия между фреймами / iframe — это использование , поддерживается всеми браузерами

12 window.postMessage мы можем использовать только в том случае, если мы можем получить доступ как к родительскому (наша HTML-страница), так и к дочернему элементу (iframe другого домена). В противном случае «ВОЗМОЖНОСТИ НЕТ», всегда будет выдана ошибка «Uncaught DOMException: Blocked a рамка с началом «»от доступа к фрейму с перекрестным происхождением».

Проверьте веб-сервер домена на наличие конфигурация для Это функция безопасности, предназначенная для предотвращения атак clickJacking,

Политика одинакового происхождения

Вы не могу доступ к с другим происхождением с использованием JavaScript, это было бы огромным недостатком безопасности, если бы вы могли это сделать. Для политики одного происхождения браузеры блокируют скрипты, пытающиеся получить доступ к фрейму с другим происхождением.

Источник считается другим, если не поддерживается хотя бы одна из следующих частей адреса:

протокол://имя хоста:порт/...

Если вы хотите получить доступ к фрейму, протокол, имя хоста и порт должны совпадать с вашим доменом.

ПРИМЕЧАНИЕ. Известно, что Internet Explorer не строго следует этому правилу, подробности см. Здесь.

11 ответов

Лучший ответ

Ваш веб-сайт также находится в домене oxfordlearners Commandaries.com? или вы пытаетесь позвонить в домен, и вас блокирует та же политика происхождения?

Если у вас нет разрешения на установку заголовка через CORS в домене oxfordlearnersictionaries.com, вы можете поискать другой подход.

6

jsmartfo
30 Май 2014 в 17:17

Я думаю, что установка заголовка на поможет. Была такая же проблема, и я решил ее вот так.

-1

Vu Tuan Hung
16 Апр 2020 в 07:28

Я использовал метод , но все равно получил ошибку CORS. Оказывается, в запрошенном PHP-скрипте была ошибка (я забыл добавить точку (.) При объединении двух переменных). Как только я исправил эту опечатку, все заработало!

Итак, похоже, что вызываемый удаленный скрипт не может содержать ошибок.

Arya
18 Янв 2019 в 21:54

Это тоже нужно.

Jay Bharat
27 Ноя 2018 в 17:27

У меня была такая же проблема, когда я работал над asp.net Mvc webApi, потому что cors не был включен. Я решил это, включив метод cors внутри реестра webApiconfig

Сначала установите cors с здесь тогда

TAHA SULTAN TEMURI
22 Окт 2018 в 07:18

Если ваш веб-сайт также находится в домене oxfordlearnersictionaries.com, ИСПОЛЬЗУЙТЕ следующее в файле oxfordlearners Commandaries.com .htaccess:

Набор заголовков Access-Control-Allow-Origin «*»

2

Nikhil Gyan
19 Ноя 2018 в 09:22

Добавьте их в файл php, где ваш URL-адрес ajax вызывает

3

Er Sahaj Arora
29 Окт 2020 в 14:01

Добавьте приведенный ниже код в свой .htaccess.

Набор заголовков Access-Control-Allow-Origin *

Меня устраивает.

Благодарность

3

Shafiq
6 Июл 2018 в 11:56

Мы не можем получить данные со стороннего веб-сайта без jsonp.

Вы можете использовать функцию php для получения данных, таких как file_get_contents () или CURL и т. Д.

Затем вы можете использовать URL-адрес PHP со своим кодом ajax.

Создайте файл PHP = get_data.php

10

Raju Singh
27 Авг 2015 в 11:43

Поместите строку ниже в верхней части файла, который вы вызываете через AJAX.

12

Brian Burns
15 Мар 2018 в 06:10

JSONP или «JSON с заполнением» — это метод связи, используемый в программах JavaScript, работающих в веб-браузерах, для запроса данных с сервера в другом домене, что запрещено типичными веб-браузерами из-за политики одного и того же происхождения. JSONP использует тот факт, что браузеры не применяют политику одного и того же происхождения к тегам скриптов

Обратите внимание, что для работы JSONP сервер должен знать, как отвечать с результатами в формате JSONP. JSONP не работает с результатами в формате JSON

Хороший ответ на stackoverflow: перекрестный домен jQuery AJAX

28

Community
23 Май 2017 в 11:54

Метод обратного прокси

Установка простого обратного прокси на сервере позволит браузеру использовать относительные пути для запросов Ajax, в то время как сервер будет действовать как прокси для любого удаленного местоположения.

При использовании mod_proxy в Apache основная директива конфигурации для настройки обратного прокси — это , Обычно используется следующим образом:

В этом случае браузер сможет запросить как относительный URL, но сервер будет служить этому, выступая в качестве прокси для ,

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

1 ответ

6

Лучший ответ

Я наконец нашел решение.

В верхней части моего iframe был установлен домен domain.location для а мой iframe — domain.location, установленный на .

Событие, хотя я все еще думаю, что оба принадлежат к одному домену, браузеру это не нравится.

Повторная настройка domain.location выполнила работу.

Чтобы ответить тем, кто спрашивает о том, как переустановить , вот фрагмент кода, который использовал моя команда. Это довольно старый (2 года назад), не очень оптимизированный, и мы больше не используем его, но, полагаю, это стоит поделиться. В основном, то, что мы делали, это загрузить с передачей его верхнего домена в параметрах URL.

06 фев. 2015, в 18:16
Поделиться

Ещё вопросы

  • 2использование ffmpeg в функции Azure для вырезания файлов с помощью c #
  • предотвратить повторяющиеся записи в таблице MySQL
  • 1Android-источник?
  • 1Извлечение заключенного в скобки выражения Python из строки
  • Попытка понять рутину JQuery
  • 1Как загрузить Eden с композитором?
  • 1Как удалить отмеченные элементы из базы данных в Android?
  • 2Console.Write в приложении .NET GUI
  • есть ли разница между этими двумя частями кода? (временная переменная)
  • Переменные данных PHP отсутствуют в электронной почте
  • 1Как заполнить часть растрового изображения, обведенную черной рамкой, выбранным цветом?
  • AngularJS множественное включение
  • Написание «<» в HTML
  • Uncaught TypeError: незаконный вызов
  • 1Android как получить Предлагаемый массив строк из TextEdit
  • 1Как установить резервные изображения в полимере
  • Внутренняя Регистрация с 3 из
  • Javascript код работает на ПК, но не на сайте учителя после загрузки
  • 1Neo4j PHP возвращает результаты в том же порядке, что и где
  • Как создать исходный код OCaml, используя Genlex
  • Javascript итерация по ошибке хеша
  • Javascript API получает свойства методов-членов
  • 1GWT скрипт инжектор не синхронно
  • тестирование угловых сервисов: модуль не определен
  • 1Функция оператора instanceof Javascript возвращает себя
  • 1pytest 2.3 добавление разрывов внутри класса
  • 2Сложный внешний ключ Entity Framework 5.0 для не первичного ключа — возможно ли это?
  • Проблемы с движком конструктора
  • Скрыть отдельные разделы формы RSFormPro, когда предел подачи достигнут
  • 1Добавление пользовательских атрибутов в Zend Framework 2 с использованием формы Zend
  • Загрузка CSV-файла в MySQL на сервере
  • Oracle OCCI ‘select count (*)’ выборка результатов
  • Отключить кнопку в JQuery Datatable
  • 1Точечная нотация Javascript и нотация в скобках
  • Изменение размера окна jquery на SVG
  • 1Подкаталог RewriteCond не работает
  • int Строковое представление фиксированной длины
  • AngularJS определяет, изменился ли раскрывающийся список нажатием кнопки
  • 1Почему мое изображение не полностью нарисовано?
  • Создать фиксированную высоту div
  • 1Three.js указывают на легкую тень не там, где она должна быть
  • 2используя регулярные выражения для разделения уравнений с переменными C #
  • Очень специфическая ошибка компоновщика в C ++
  • 1Добавление представления в пользовательскую группу просмотра
  • 1Сообщение SOAP, в результате которого «400 неверных запросов»
  • 1Как сохранить данные формы php на веб-сервере в виде простого текстового файла?
  • Sql эквивалентность строки соединения MySql (C #)
  • 1Java-метод для обращения каждого слова в массиве строк
  • Как получить выбранные метки из HTML <select>?
  • Переключение между вложенным неупорядоченным списком с помощью jQuery и добавление или редактирование узла в списке

Решение вопроса

Если веб-сервер активировал функцию безопасности, это может вызвать ошибку SecurityError на стороне клиента, как и должно быть.

2 Я не думаю, что здесь применимы X-Frame-Options — X-Frame-Options, определенные гостевой (встроенной) страницей, могут привести к тому, что родитель откажется загружать страницу, но, насколько я знаю, это не влияет доступ к javascript — даже с X-Frame-Options: *, я не думаю, что вы сможете получить доступ к DOM гостевой страницы другого происхождения с помощью javascript

Для меня я хотел реализовать двухстороннее рукопожатие, что означает: — родительское окно будет загружаться быстрее, чем iframe — iframe должен разговаривать с родительским окном, как только оно будет готово — родитель готов получить сообщение iframe и воспроизвести

этот код используется для установки белой метки в iframe с помощью &lsqb;настраиваемого свойства CSS&rsqb; код:iframe

родитель

естественно, вы можете ограничить источник и текст, с этим легко работать с кодом Я нашел этот пример полезным: &lsqb;Междоменный обмен сообщениями с postMessage&rsqb;

  • Я имею дело с проблемой сафари, когда документ в iframe выполняет свой JS позже, чем родительская страница, что приводит к тому, что сообщение отправляется раньше, чем документ в iframe прослушивает сообщения; что прямо противоположно тому, что делают chrome и firefox — вы тестировали свой код в сафари на ios? btw postMessage со вторым параметром значения «*» не совсем безопасно, вы всегда должны указывать домен
  • Ваш первый блок кода находится в iframe в родительском элементе или на странице, загружаемой в iframe?

Я хотел бы добавить специальную конфигурацию Java Spring, которая может повлиять на это.

В приложении веб-сайта или шлюза есть параметр contentSecurityPolicy

в Spring вы можете найти реализацию подкласса WebSecurityConfigurerAdapter

Браузер будет заблокирован, если вы не укажете здесь безопасный внешний контент.

Если у вас есть контроль над содержимым iframe, то есть если он просто загружается в настройках с перекрестным происхождением, например Amazon Mechanical Turk, вы можете обойти эту проблему с помощью атрибут для внутреннего html.

Например, для внутреннего html используйте html параметр (да — определен и относится к родительскому окну внутреннего элемента тела):

Во внутреннем html:

Я столкнулся с этой ошибкой при попытке встроить iframe и затем открыть сайт с помощью Brave. Ошибка исчезла, когда я перешел на «Shields Down» для рассматриваемого сайта. Очевидно, что это не полное решение, поскольку любой, кто посещает сайт с Brave, столкнется с той же проблемой. Чтобы действительно решить эту проблему, мне нужно было бы сделать одно из других действий, перечисленных на этой странице. Но по крайней мере теперь я знаю, в чем проблема.

  • Откройте стартовое меню
  • Введите windows + R или откройте «Выполнить»
  • Выполните следующую команду.
  • 9 Ужасно для всего, что не является быстрым и грязным тестом… и уже адрес в принятом ответе.
  • 3 Даже с командой это не работает, потому что Chrome таким образом избегает отключения веб-безопасности.

Метод совместного использования ресурсов из разных источников

Cross-Origin Resource Sharing (CORS) — это рабочий проект W3C, который определяет, как браузер и сервер должны взаимодействовать при доступе к источникам из разных источников. Основная идея CORS состоит в том, чтобы использовать пользовательские заголовки HTTP, чтобы браузер и сервер знали достаточно друг о друге, чтобы определить, будет ли запрос или ответ успешным или нет.

Для простого запроса, который использует или без пользовательских заголовков и тело которого , запрос отправляется с дополнительным заголовком с именем . Заголовок Origin содержит Origin (протокол, имя домена и порт) запрашивающей страницы, чтобы сервер мог легко определить, должен ли он обслуживать ответ. Пример заголовка может выглядеть так:

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

Если этот заголовок отсутствует или происхождение не совпадает, браузер отклоняет запрос. Если все хорошо, то браузер обрабатывает запрос

Обратите внимание, что ни запросы, ни ответы не содержат информацию о файлах cookie

Команда Mozilla предлагает в их сообщение о CORS вам следует проверить наличие свойства , чтобы определить, поддерживает ли браузер CORS через XHR. Затем вы можете связать с существованием объекта , чтобы охватить все браузеры:

Обратите внимание, что для работы метода CORS вам необходимо иметь доступ к механике заголовков сервера любого типа и просто не иметь доступа к сторонним ресурсам

Решение

Что-то плохое произошло с вашим интерфейсом администратора WordPress.

Первое, на что нужно обратить внимание, это то, что описанная вами ошибка — это хорошо известная проблема, о которой вы, возможно, уже заметили: SecurityError: заблокирован фрейм с источником от доступа к фрейму кросс-происхождения

Посмотрите на первый ответ там:

Второе, на что стоит обратить внимание, это то, что «Посмотреть детали» Кнопка в интерфейсе администратора WordPress делает: Он открывает ThickBox, содержащий и iframe, который довольно часто показывает удаленное содержимое в IFrame. Как это работает, точно описано здесь: https://codex.wordpress.org/Javascript_Reference/ThickBox. является важным файлом ядра WordPress, загружаемым в администратор, который используется для загрузки файлов JavaScript без необходимости встраивания каждого из них

Эти файлы JavaScript обычно добавляются к администратору WordPress с помощью функция (https://codex.wordpress.org/Plugin_API/Action_Reference/admin_enqueue_scripts)

является важным файлом ядра WordPress, загружаемым в администратор, который используется для загрузки файлов JavaScript без необходимости встраивания каждого из них. Эти файлы JavaScript обычно добавляются к администратору WordPress с помощью функция (https://codex.wordpress.org/Plugin_API/Action_Reference/admin_enqueue_scripts).

Поскольку ваша проблема довольно необычна, и кнопка «Просмотреть подробности» для плагинов работает почти каждый раз, когда есть только две возможности:

1. IFrame «View Details» обычно загружается из того же места, где находится ваш WordPress — поэтому у вас может быть проблема, связанная с тем, что браузер хочет загрузить его с другого хоста

Это происходит, если у вас есть какая-то неверная конфигурация в вашей установке WordPress, и Thickbox пытается получить IFrame от хоста, который браузер считает другим хостом. Настройте WordPress правильно.

2. У вас есть плохо запрограммированный плагин или тема, которая внедряет скрипт, вызывающий эту проблему.

Решение: Деактивируйте вашу тему и все ваши плагины один за другим и посмотрите, сохраняется ли ошибка. Таким образом, вы можете узнать модификацию, которая вызывает проблему, и, возможно, сделать запрос об ошибке разработчикам плагинов.

Почти на 100% уверен, что проблема связана с одним плагином, темой или неправильной конфигурацией.

3

Метод window.postMessage

, когда вызывается, вызывает отправку в целевом окне, когда завершается любой ожидающий сценарий, который должен быть выполнен (например, оставшиеся обработчики событий, если вызывается из обработчика событий, предварительно установленные тайм-ауты ожидания и т. д.). имеет сообщение типа, свойство , для которого задано строковое значение первого аргумента, предоставленного , свойство , соответствующее происхождению основного документа в окне, вызывающем во время вызова , и Свойство , которое является окном, из которого вызывается код .

Чтобы использовать , прослушиватель событий должен быть подключен:

И функция должна быть объявлена:

Внешнее iframe также должно правильно отправлять события через :

Любое окно может получить доступ к этому методу в любом другом окне, в любое время, независимо от местоположения документа в окне, чтобы отправить ему сообщение. Следовательно, любой прослушиватель событий, используемый для получения сообщений, должен сначала проверить личность отправителя сообщения, используя свойства Origin и, возможно, свойства источника. Это не может быть недооценено: Неспособность проверить свойства и, возможно, включает межсайтовые скриптовые атаки.

Деструктуризация объекта

Базовый синтаксис деструктуризации объекта довольно прост:

const { identifier } = expression;

Здесь это имя свойства, к которому необходимо получить доступ, а выражение, которое должно возвращать объект или им являться. После деструктуризации переменная содержит значение одноименного свойства объекта.

Рассмотрим следующий пример:

const hero = {
  name: 'Batman'
};

// Деструктуризация объекта
const { name } = hero;
console.log(name); // => 'Batman'

Инструкция выполняет деструктуризацию объекта. Деструктуризация определяет переменную , которой передается значение свойства объекта .

Когда вы привыкнете к синтаксису деструктуризации объектов, то обнаружите, что это отличный способ в одной инструкции кода извлечь значения свойств некоторого объекта во вновь создаваемые переменные.

Обратите внимание, что вы можете извлечь значения стольких свойств, сколько захотите:

const { identifier1, identifier2, .., identifierN } = expression;

3.1 Используем псевдоним переменной для деструктуризации

Если вы хотите получить доступ к свойству некоторого объекта, но при этом создать переменную с именем отличным от названия его свойства, то вы можете использовать ее псевдоним.

const { identifier: aliasIdentifier } = expression;

Здесь имя свойства к которому мы хотим получить доступ, имя, создаваемой переменной, а соответственно содержит или возвращает объект. После деструктуризации переменная будет содержать значение свойства .

Рассмотрим следующий пример:

const hero = {
  name: 'Batman'
};

// Деструктуризация объекта:
const { name: heroName } = hero;
console.log(heroName); // => 'Batman'

В инструкции происходит деструктуризация объекта . В ходе его деструктуризации определяется новая переменная (вместо имени соответствующего названию свойства, как в предыдущем примере) и присваивает значение .

3.2 Динамическое имя свойства

Что именно делает деструктуризацию объектов еще более полезной, так это то, что вы можете извлекать в переменные их свойства с динамически изменяющимися именами:

const { : identifier } = expression2;

Первое выражение возвращает имя свойства к которому мы хотим получить доступ. В указывается имя переменной, создающейся после деструктуризации, в которую затем будет передано извлекаемое значение. Второе выражение должно возвращать или содержать объект, который мы хотели бы деструктурировать.

Рассмотрим следующий пример:

const property = 'name';
const hero = {
  name: 'Batman'
};

// Деструтуризация объекта:
const { : name } = hero;
console.log(name); // => 'Batman'

Так в инструкции мы деструктурируем объект и далее динамически, во время выполнения кода, определяем название его свойства, которое нам необходимо извлечь.

Метод совместного использования ресурсов из разных источников

Обмен ресурсами между источниками (CORS) — это рабочий проект W3C, который определяет, как браузер и сервер должны взаимодействовать при доступе к источникам из разных источников. Основная идея CORS состоит в том, чтобы использовать пользовательские заголовки HTTP, чтобы браузер и сервер знали достаточно друг о друге, чтобы определить, будет ли запрос или ответ успешным или нет.

Для простого запроса, который использует либо или же без пользовательских заголовков и чье тело запрос отправляется с дополнительным заголовком , Заголовок Origin содержит источник (протокол, имя домена и порт) запрашивающей страницы, так что сервер может легко определить, должен ли он обслуживать ответ. Пример заголовок может выглядеть так:

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

Если этот заголовок отсутствует или источники не совпадают, браузер отклоняет запрос. Если все хорошо, то браузер обрабатывает запрос

Обратите внимание, что ни запросы, ни ответы не содержат информацию о файлах cookie

Команда Mozilla в своем сообщении о CORS предлагает проверить наличие свойство, чтобы определить, поддерживает ли браузер CORS через XHR. Затем вы можете соединиться с существованием Объект для покрытия всех браузеров:

Обратите внимание, что для работы метода CORS вам необходим доступ к механике заголовков сервера любого типа, и вы не можете просто получить доступ к сторонним ресурсам

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: