Quasar CLI with Webpack - @quasar/app-webpack
src-bex/js/dom-hooks.js
是一個 javascript 檔案,由 Quasar 自動注入到基礎網頁中,但與所有其他 hook 檔案一樣,可以透過以下方式存取橋樑:
import { bexDom } from 'quasar/wrappers'
export default bexDom((bridge) => {
//
})
content_paste
如果您發現自己需要將 JS 檔案注入到基礎網頁中,則可以使用 dom hooks 來代替,因為這表示您可以維護 BEX 中的通訊鏈。
例如,假設您想要編寫一個 BEX,以偵測頁面上是否正在執行 Quasar 應用程式,唯一的方法是在網頁的上下文中執行一些 javascript。
// detect-quasar.js:
function initQuasar (bridge, quasarInstance) {
bridge.send('quasar.detect', {
version: quasarInstance.version,
dark: {
isActive: quasarInstance.dark ? quasarInstance.dark.isActive : void 0
},
umd: quasarInstance.umd,
iconSet: {
name: quasarInstance.iconSet.name,
__installed: quasarInstance.iconSet.__installed
},
lang: {
rtl: quasarInstance.lang.rtl
}
})
window.__QUASAR_DEVTOOLS__ = {
Quasar: quasarInstance
}
}
export default function detectQuasar (bridge) {
if (window.Quasar) { // UMD
initQuasar(bridge, {
version: window.Quasar.version,
dark: window.Quasar.Dark,
...window.Quasar,
umd: true
})
}
else { // CLI
let isVue3 = false
setTimeout(() => {
const all = document.querySelectorAll('*')
let el
for (let i = 0; i < all.length; i++) {
if (all[i].__vue__ || all[i].__vue_app__) {
el = all[i]
isVue3 = all[i].__vue_app__ !== void 0
break
}
}
if (el) {
const Vue = isVue3 ? el.__vue_app__ : Object.getPrototypeOf(el.__vue__).constructor
const quasar = isVue3 ? Vue.config.globalProperties.$q : Vue.prototype.$q
if (quasar) {
initQuasar(bridge, quasar, Vue)
}
}
}, 100)
}
}
content_paste
import { bexDom } from 'quasar/wrappers'
import detectQuasar from './dom/detect-quasar'
export default bexDom((bridge) => {
detectQuasar(bridge)
})
content_paste
上述橋樑將通知 BEX 中的所有監聽器,已找到 Quasar,並隨之傳送實例資訊。