iframe dalam komponen Vue dibuka dalam tab baharu (Safari sahaja) ----- kadangkala
P粉238355860
P粉238355860 2024-03-19 19:35:49
0
1
364

Saya mempunyai komponen Vue yang mengandungi IFrame. Komponen ini menggunakan storan Vuex untuk membuat panggilan API untuk mendapatkan maklumat tentang SSO yang akan dimuatkan dalam IFrame. Kali pertama komponen dipasang, ia dimuatkan dengan sempurna ke dalam IFrame. Walau bagaimanapun, apabila saya menukar skrin dan memasang komponen semula, SSO dimuatkan dalam tab baharu. Kemudian jika saya pergi ke skrin lain ia dimuatkan seperti biasa semula. Jadi isu tab baharu hanya berlaku sekali-sekala apabila komponen dipasang.

Perhatikan bahawa tingkah laku ini hanya berlaku dalam Safari. Semua yang lain berfungsi seperti yang diharapkan.

Kod saya sangat serupa dengan ini. Mesti diubah suai atas sebab proprietari.

<template>
  <div>
  <form
    :action="endPoint"
    target="the_iframe"
    ref="ssoForm"
    method="POST"
    name="ssoForm"
    id="ssoForm"
  >
    <input
      id="AuthCode"
      type="hidden"
      name="AuthCode"
      :value="authorizationCode"
    />
    <input
      id="AuthAppUrl"
      type="hidden"
      name="AuthAppUrl"
      :value="authAppUrl"
    /> 
    
  </form>
  <iframe
      width="100%"
      name="the_iframe"
      height="300"
      style="display: flex"
      id="the_iframe"
      frameborder="0"
    ></iframe>
  </div> 
</template>

<script>
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()
  }
}
</script>

P粉238355860
P粉238355860

membalas semua(1)
P粉052724364

Saya akhirnya mengambil komponen itu ke tahap yang lebih tinggi. Setiap kali laluan berubah, komponen dimuat semula/dipasang. Saya mengalihkannya supaya ia hanya perlu dimuatkan sekali. Ini kelihatan lebih seperti penyelesaian daripada pembetulan, tetapi ia berfungsi.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan