Динамический src в AMP iframe

#iframe #amp-html

#iframe #amp-html

Вопрос:

Я работаю в приложении, которое встроено в другие веб-сайты, и некоторые из них используют AMP. В настоящее время я использую amp-iframe, и мне нужен URL-адрес веб-сайта, в который в данный момент встроен iframe, для правильной работы моего приложения. Я пытаюсь передать его через параметры, чтобы использовать его в своем приложении.

Что я пытался сделать, так это получить местоположение.href (или location.origin location.путь) с помощью amp-script и установка состояния AMP для динамического изменения src Iframe. В настоящее время не работает.

HTML:

 <amp-script layout="container" src="https://cdn.website.com/script.js">
       <amp-iframe height="150" resizable sandbox="allow-scripts allow-same-origin allow-popups allow-forms" frameborder="0" src="https://website.com/dev/html" [src]="dynamicUrl">
          <div overflow tabindex="0"></div>
      </amp-iframe>
</amp-script>
  

JS:

 function checkForAmp(method) {
  if (window.AMP amp;amp; typeof window.AMP.setState === "function") {
    method();
  } else {
    setTimeout(function () {
      checkForAmp(method);
    }, 50);
  }
}

function getUrlAndUpdateWidget() {
  const url = `https://website.com/dev/html?dynamic-url=${
    window.AMP.win.location.origin   window.AMP.win.location.pathname
  }`;
  window.AMP.setState({ dynamicUrl: url });
}

checkForAmp(getUrlAndUpdateWidget);
  

Есть идеи, как обойти это?

Спасибо!

Ответ №1:

К сожалению, AMP объект, к которому у вас есть доступ amp-script , — это не то же самое, AMP что объект вне рабочего.

AMP.win есть undefined . Я даже не думаю window.AMP.setState === "function" , что это сработает.

<a rel="noreferrer noopener nofollow" href="https://amp.dev/documentation/examples/components/amp-script/#interacting-with-» rel=»nofollow noreferrer»>Смотрите Здесь пример, показывающий, как использовать AMP.setState in amp-script !

Нам действительно нужен кто-то, чтобы внедрить поддержку location объекта. Помогает комментирование проблемы с github, как вы это делали. Что нам действительно нужно, так это тот, у кого есть время внести свой вклад в код 😎