Не удалось получить список стран во фруктовых окнах

Обновлено: 21.11.2024

Ну, у меня есть IFrame, который вызывает ту же страницу домена. Моя проблема в том, что я хочу получить доступ к некоторой информации из этого родительского Iframe с этой вызываемой страницы (из JavaScript). Как я могу получить доступ к этому iframe?

Подробности: есть несколько фреймов, подобных этому, которые могут загружать одну и ту же страницу, потому что я программирую среду Windows. Я намерен закрыть этот iframe, поэтому мне нужно знать, какой я должен закрыть изнутри него. У меня есть массив, содержащий ссылки на эти фреймы.

EDIT: фреймы генерируются динамически

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

9 ответов 9

Также вы можете установить одинаковые значения имени и идентификатора

чтобы вы могли использовать следующий код внутри дочерней страницы

Даже в 2016 году это прекрасно работает как часть решения проблемы, связанной с тем, что IE печатает слишком маленькое содержимое окна iframe. Но почему это работает? window.name возвращает строку. Чем отличается использование window.name от простой передачи имени идентификатора в виде строки, что не работает.)?

Здравствуйте, это не работает с Chrome 59.. :VM111:1 Uncaught DOMException: заблокирован фрейм с источником "xxx" от доступа к фрейму из другого источника.

Chrome видит файлы в той же папке, что и кросс-происхождение, если не установлен CORS. Говорят, это для безопасности. Для установки CORS нужен сервер. Отправьте пользователям сообщение с просьбой настроить сервер или сменить браузер, если обнаружен Chrome.

Просто вызовите window.frameElement со страницы во фрейме. Если страница не находится во фрейме, элемент frameElement будет иметь значение null .

Другой способ (поместить элемент окна во фрейм менее тривиально), но для полноты картины:

window.frameElement возвращает значение null, если окно и iframe имеют разные домены, т. е. обмен сообщениями между источниками.

@Qwerty Одним из возможных решений является использование iframe в качестве «прокси» для отправки сообщений между страницами в разных доменах. sysend.js делает это, например, с помощью postMessage() .

Я бы рекомендовал использовать API postMessage.

В iframe вызовите:

На странице, на которую вы добавляете iframe, вы можете отслеживать такие события:

Кстати, также можно делать вызовы и к другим окнам, а не только к iframe.

Подробнее об API postMessage читайте в блоге Джона Резигса здесь

Я думаю, что это явно лучший ответ, содержимое не должно ничего знать о родительском элементе и наоборот. Им нужно только соблюдать простой контракт сообщения. Потрясающе!

@HomrZodyssey Родительский домен доступен только в качестве механизма безопасности, если он неизвестен, вы можете установить '*' .

Старый вопрос, но у меня была такая же проблема, и я нашел способ получить iframe. Это просто вопрос перебора массива frameworks[] родительского окна и проверки contentWindow каждого фрейма в сравнении с окном, в котором выполняется ваш код. Пример:

ISO 3166-1-alpha-2 Английские названия стран и элементы кода. В этом списке указаны названия стран (официальные краткие названия на английском языке) в алфавитном порядке, как указано в ISO 3166-1, и соответствующие элементы кода ISO 3166-1-alpha-2. [ИСО 3166-1]: подробнее

Файлы данных

Скачать файлы в этом наборе данных

Подпишитесь на премиум-сервис, чтобы получить дополнительные или персонализированные данные – начать работу

Это предварительная версия. В оригинальной версии может быть больше данных.

Информация о поле

Файл Описание Размер Последнее изменение Загрузить
данные 4kB csv (4kB), json (9kB)
country-list_zip Сжатые версии набора данных. Включает нормализованные данные CSV и JSON с исходными данными и datapackage.json. 9kB zip (9kB)
Имя поля Порядок Тип (формат) Описание
Название 1 string Название страны
Код 2 string Двузначный код ISO из ISO 3166-alpha-2

Похожие наборы данных

Коды стран

Коды континентов

Коды аэропортов

Коды языков

Не нашли то, что ищете?

Вы можете искать более тысячи наборов данных на datahub

Добавьте этот набор данных в свой любимый инструмент

Используйте наш инструмент data-cli, разработанный для обработчиков данных:

Если вы используете R, вот как быстро загрузить нужные данные:

Примечание: вам может потребоваться запустить скрипт с правами суперпользователя, если вы работаете на компьютере с Linux

Установите библиотеку пакетов данных Frictionless Data и сами панды:

Теперь вы можете использовать пакет данных в Pandas:

Для Python сначала установите библиотеку `datapackage` (все наборы данных в DataHub являются пакетами данных):

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

Если вы используете JavaScript, следуйте инструкциям ниже:

Установите модуль data.js с помощью npm:

После установки пакета используйте следующий фрагмент кода:

Прочитай меня

ISO 3166-1-alpha-2 Английские названия стран и элементы кода. В этом списке указаны названия стран (официальные краткие названия на английском языке) в алфавитном порядке, как указано в ISO 3166-1, и соответствующие элементы кода ISO 3166-1-alpha-2.

Этот список обновляется каждый раз, когда ISO 3166/MA вносит изменения в официальный список кодов в ISO 3166-1.

По состоянию на декабрь 2012 г. в нем перечислены 250 официальных кратких имен и элементов кода.

Лицензия

Этот материал предоставляется его сопровождающими по лицензии Public Domain Dedication and License.

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

ISO бесплатно предоставляет список кодов стран alpha-2 для внутреннего использования и в некоммерческих целях.

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

Ключевые слова и фразы: список стран, коды стран ISO, код страны +2, список стран, страны с двузначными кодами, коды стран ISO 3166-1, названия стран, ISO 3166-1-alpha-2.

Если вы используете Verify API для регистрации, мы рекомендуем сначала включить гео-разрешения. Чтобы управлять включенными и заблокированными странами, посетите раздел «Проверка» консоли Twilio.

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

Использование разрешенного списка стран при регистрации — отличный способ убедиться, что вы соблюдаете нормативные требования, снижаете количество случаев мошенничества или иным образом контролируете процесс адаптации. Twilio Lookup API предоставляет набор инструментов для проверки телефонных номеров и удобно включает код страны в ответ, чтобы вы могли легко создать белый список.

Вот краткий фрагмент кода JavaScript из примера списка разрешений:

В остальной части поста будет рассказано о создании этого решения с помощью Twilio Lookup API и Node.js. Однако Twilio Lookup API поддерживает несколько языков, поэтому ознакомьтесь с документацией, чтобы найти примеры на предпочитаемом вами языке.

Необходимые условия для создания списка разрешенных кодов стран

Чтобы кодировать вместе с этим сообщением, вам необходимо:

Шаг 1. Зарегистрируйтесь или войдите в свою учетную запись Twilio

Шаг 3. Установите Twilio CLI (подробнее)

Шаг 3. Установите подключаемый модуль Serverless CLI

Шаг 4. Войдите в интерфейс командной строки, используя данные своей учетной записи Twilio

Загрузить начальный шаблон поиска

С помощью интерфейса командной строки клонируйте шаблон ввода международного номера телефона из кодовой биржи Twilio:

Откройте файл .env и убедитесь, что учетные данные вашей учетной записи Twilio ( ACCOUNT_SID и AUTH_TOKEN ) заполнены. Вы можете запустить приложение, выполнив:

Прямо сейчас приложение делает очень удобную вещь, принимая номера в международном формате и конвертируя их в стандартный формат E.164. Затем API поиска проверяет, является ли номер допустимым или нет. Если вы попытаетесь ввести только 12345 или любой другой недопустимый номер телефона, вы получите сообщение об ошибке.

Добавьте список разрешений в форму регистрации

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

Чтобы добавить список разрешений, откройте файл functions/lookup.js и добавьте следующую строку после const client = . :

В этом списке используются коды стран ISO 3166-2 Alpha-2, которые также использует Lookup API. В нашем примере разрешенными странами являются США, Канада и Мексика.

Если вы посмотрите на остальную часть функции, то заметите, что на самом деле мы не используем ответ от Lookup API. Чтобы использовать ответ и получить возвращенный код страны, замените 5-строчный блок кода, начинающийся с response.setStatusCode(200); с:

Наконец, перейдите к assets/index.html и обновите строку 73, чтобы сообщить о сообщении об ошибке функции:

Убедитесь, что проект запущен с помощью twilio serverless:start , перейдите по адресу http://localhost:3000/index.html и протестируйте его! Номер США, например 5108675310, будет работать, но если вы выберете флаг Германии из раскрывающегося списка и введете действительный немецкий номер, например 015123456789, вы должны увидеть сообщение об ошибке "Код страны не разрешен".

Другое использование Lookup API

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

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

Конечно, после того, как вы внедрили Lookup, вы захотите проверить телефонные номера с помощью Verify API Twilio. Вот еще несколько ресурсов по безопасности аккаунта, которые могут вам пригодиться:

Читайте также: