Междоменный iframe не может получить API контекста AMP
Эта проблема связана со случаями, когда попытки доступа к API контекста amp (Accelerated Mobile Pages) из вложенного стороннего iframe (в частности, DFP) безуспешны. Использование #6829 ( https://github.com/ampproject/amphtml/issues/6829) работает БОЛЬШЕ времени. Однако есть случаи, когда свойство name в iframe DFP не является строкой JSON, как ожидается решением в #6829. Поэтому у рекламного объявления нет доступа к "ampcontextVersion", "sourceUrl" и т. Д.
Как мы воспроизводим проблему?
Как я уже сказал, проблема временная, но случается, вероятно, в 20% случаев. Используя следующий URL для тестирования, мы видим, что в случае сбоя window.name возвращает что-то вроде:
"google_ads_iframe_/24156345/mobile_twist/article_amp/inline1_0"
В успешном случае window.name возвращает что-то вроде этого (я опускаю некоторые значения для ясности):
"{ "host":"d-3447962333352148365.ampproject.net", "type":"ix","count":4,"attributes":{"ixId":"218918","slot":"/24156345/mobile_twist/article_amp/inline1","ampSlotIndex":"0","width":320,"height":50,"_context":{"ampcontextVersion":"1510956201635","ampcontextFilepath":"https://3p.ampproject.net/1510956201635/ampcontext-v0.js","sourceUrl":"http://www.twistmagazine.com/posts/tommy-dorfman-13-reasons-why-career-134029.amp"},"type":"ix"}}"
Также обратите внимание, как свойство "ampcontextVersion" на самом деле вложено в attribute._context в JSON. Это противоречит тому, что #6829 говорит о том, где он должен находиться на верхнем уровне строки JSON, возвращаемой window.context внутри iframe 3P.
Тестовый URL: http://www.twistmagazine.com/posts/tommy-dorfman-13-reasons-why-career-134029.amp
Шаг 1: Откройте URL в мобильной среде. Шаг 2. Прокрутите вниз, чтобы активировать объявление amp для загрузки. Шаг 3. Используйте инструменты разработчика, чтобы просмотреть свойство name в фреймах DFP.
Почему несоответствие? #6829 ошибочен или DFP не реализован правильно? Я заметил, что в успешном случае теги DFP являются тегами GPT Light. В случае сбоя GPT Light (Glade) не отображается на странице.