前言
先說一下,使用v-html要達到什麼效果。
故事是這樣的:
我們系統需要一個“程式碼元件”,即使用者可以插入html/css/js程式碼來修改他的網站。所以,我就想到了用v-html
指令來渲染使用者提交的程式碼。
PS : innerHTML是不會執行script程式碼的。
v-html:
更新元素的 innerHTML
v-html也不會執行script程式碼。
解決方案
百度and google一番,給出的方案大致如下: 1.在渲染完成後,過濾掉script程式碼,動態插入script標籤 2.過濾下script程式碼,使用elval執行 3.自己寫一個可以執行script的指令
最終:我使用了一個現成的外掛vue-append。
vue-append: like v-html directive, but it can call javascript function
使用外掛的時候,有一點小問題就是,該外掛不支援script外鏈的形式。 看了它的github的issues,發現裡面就有其解決方案。 方案連結如下: github.com/hacke2/vue-…
總結
看了一下vue-append的原始碼,其實現的原理分析如下: 匹配script程式碼,將裡面的程式碼使用eval執行。