Компонент Iframe в Vue открывается на новой вкладке (только в Safari) —— иногда

#javascript #vue.js #iframe #safari

Вопрос:

У меня есть компонент Vue, который содержит IFrame. Компонент выполняет вызовы API, используя хранилище Vuex, чтобы получить информацию для единого входа, которая будет загружена в IFrame. При первом монтаже компонента он отлично загружается в IFrame. Но когда я переключаю экраны и компонент снова монтируется, единый вход загружается на новой вкладке. Затем, если я перейду на другой экран, он снова загрузится нормально. Таким образом, проблема с новой вкладкой возникает только каждый раз, когда монтируется компонент.

Следует отметить, что такое поведение появляется только в Safari. Работает так, как ожидается, везде.

Мой код очень похож на этот. Пришлось модифицировать по соображениям собственности.

 lt;templategt;  lt;divgt;  lt;form  :action="endPoint"  target="the_iframe"  ref="ssoForm"  method="POST"  name="ssoForm"  id="ssoForm"  gt;  lt;input  id="AuthCode"  type="hidden"  name="AuthCode"  :value="authorizationCode"  /gt;  lt;input  id="AuthAppUrl"  type="hidden"  name="AuthAppUrl"  :value="authAppUrl"  /gt;     lt;/formgt;  lt;iframe  width="100%"  name="the_iframe"  height="300"  style="display: flex"  id="the_iframe"  frameborder="0"  gt;lt;/iframegt;  lt;/divgt;  lt;/templategt;  lt;scriptgt; import types from "path/to/types" export default {  data() {  return {  endPoint: null,  authorizationCode: null,  authAppUrl: null,  errorStatus: false,  error: null  }  },  methods: {  async getSSOModel() {  try {  var data = await this.$store.dispatch(  `store/${types.GET_SSO_MODEL}`  )  this.endPoint = data.endPoint  this.authorizationCode = data.authorizationCode  this.authAppUrl = data.authAppUrl   await this.$nextTick()  this.$refs.ssoForm.submit()  } catch (error) {   this.error = error  this.errorStatus = true  }  }  },  async mounted() {  await this.getSSOModel()  } } lt;/scriptgt;  

Ответ №1:

В итоге я поднял компонент на уровень выше. Компонент загружался/монтировался повторно всякий раз, когда менялся маршрут. Я переместил его вверх, так что он должен был загрузиться только один раз. Это кажется скорее обходным путем, чем исправлением, но это работает.