在vue中使用ifream需要注意的地方

2021-08-21 02:23:30 字數 1291 閱讀 1303

近期,公司乙個原生應用要做h5版本的,因為涉及到很多webview頁面,這些webview頁面包括:h5的協議頁面、第三方保險的授權頁面、其他授權頁面。這些授權都是第三方公司給的頁面,授權成功有後端來非同步爬取第三方公司的授權結果。

經過調研發現,現階段用h5來包外部頁面的方式大概有兩種:

1、用ajax get獲取到頁面內容,填充到頁面裡面,但這種有個弊端,就是必須純靜態的頁面,也就是不能包含外部的js,css,這種的話會引起跨域問題,其實如果做的話也可以,做**,然後獲取到了,替換之前的ip或網域名稱,因為比較麻煩,這種方式就被我pass掉了。

2、用ifream,這種方式是我第一反應考慮到的方式,因為不會有跨域問題,所以我就採用了這種方式

下面,說一說我用的ifream的好處和壞處:

好處:沒有跨域問題,可以直接用,src路徑直接引入就行了.並且ifream可以直接通過this.parent來呼叫父頁面的方法,dom元素可控,沒用的元素可以直接刪除

壞處:必須用ifream.contentwindow下的方法來獲取資料,並且ifream.contentwindow執行方法時還是會有跨域問題,但這個跨域問題,只需要配置外層頁面的**就可以了,dom元素不可控

最終用了ifream,我來說一下裡面需要注意的幾個點:

1、用onload來判斷ifream是否載入完,為什麼要判斷?因為是嵌入乙個頁面,如果沒有載入完的話你需要給使用者提示載入中的等待動畫。

2、父頁面呼叫子元件的方法:必須同源,否則會提示你同源策略不允許跨域

document.getelementbyid('id').fream.contentwindow.方法名

用try catch判斷是否同源;

try

document.getelementbyid('id').fream.contentwindow.方法名();

}catch(err)

3、ifream呼叫父頁面的方法:

父頁面必須定義全域性的方法:

window.方法名=function(){}

ifream呼叫時直接window.parent.方法名()

4、因為vue中定義的全域性方法都是非同步的,所以需要在入口重定義this:

let self =this;

window.h5hiddenhud =function() ;

總結:在頁面巢狀頁面實際上我感覺不是什麼優雅的做法,這種情況下,最好能讓提供介面,自己寫頁面,實在不得以再用這種方法。

在Vue中使用Sass

sass 是什麼?sass又稱scss,它是css預處理之一。它在css語法的基礎上增加了變數 巢狀 混合巨集 繼承 佔位符等等高階功能。那什麼是css預處理器呢?簡單理解就是,css預處理是一種專門的程式語言,通過該語言進行web頁面設計,然後再編譯成正常的css檔案,以供專案使用。css預處理器...

在vue中使用wowjs

1 安裝依賴 npm install wowjs s 2 main.js中引入 引入animate.css,安裝wowjs之後,直接引入 import animate.css 3 在需要使用wowjs的元件中使用 在標籤上新增動畫的類名 data wow duration 動畫持續時間 data w...

在Vue中使用樣式

一 vue中通過屬性繫結為元素設定class樣式 方式一 直接傳遞乙個陣列,class要用v bind做資料繫結 方式二 三元表示式 方式三 陣列中巢狀物件,提高 的可讀性 方式四 在為 class 使用v bind 繫結物件的時候,物件的屬性是類名,屬性可以帶或者不帶引號都可以 class h2 ...