vue.js - Chrome 扩展内容脚本中的 Vue.js
问题描述
我正在尝试在 chrome 扩展的内容脚本中使用 Vue.js 3。
在这里,我在呈现的网页(例如 google.com)上创建元素:
内容脚本.js
let element = document.querySelector('h1#title')
element.insertAdjacentHTML('afterend', '<div id="counter">COUNTER: {{counter}}</div>');
在这里,我创建了 Vue 应用程序:
import { createApp } from 'vue'
const CounterApp = {
data() {
return {
counter: 0
}
},
mounted() {
setInterval(() => {
this.counter++
}, 1000)
}
}
createApp(CounterApp).mount('#counter')
console.log(CounterApp)
但在网页中它显示 COUNTER: {{counter}} 而不实际填充内容。
在控制台中:
{模板:“↵计数器:{{计数器}}↵<br />”,__props:数组(0),__emits:null,数据:ƒ,安装:ƒ}
解决方案
我无法在 chrome 应用程序上下文中对此进行测试,但我认为这应该可以解决您让 Vue 变量呈现的问题。
模板需要与 Vue 代码一起使用,而不是与内容脚本代码一起使用。当它被插入 DOM 时,Vue 插入你的this.counter
值已经太晚了。
内容脚本.js
在内容脚本中,只需附加空#counter
div
let element = document.querySelector('h1#title')
element.insertAdjacentHTML('afterend', '<div id="counter"></div>');
Vue 应用程序
然后在应用程序代码中添加一个.render()
函数以将值插入到您的字符串中(并将其转换为带有 的 VNode h()
)
render () {
return h(tag, props, stuffToRender)
}
因此,如果您想在其中呈现<p>
带有插值字符串模板的标签,请COUNTER: {{ this.counter }}
尝试:
import { createApp, h } from 'vue' // <-- don't forget to import h
const CounterApp = {
data() {
return {
counter: 0
}
},
mounted() {
setInterval(() => {
this.counter++
}, 1000)
},
render() {
return h('p', {}, `COUNTER: ${this.counter}`)
}
}
createApp(CounterApp).mount('#counter')
render()
关于函数的更多信息: vuejs.org
推荐阅读
- javascript - React Native 防止上下文依赖重新渲染所有组件
- drop-down-menu - Gravity Forms - 使用用户输入的信息动态填充下拉列表
- python - 需要在同一密集层中的权重之间进行数学运算
- javascript - 我不明白: for (var node = list; node; node = node.rest)
- javascript - PDF 下载显示为从 Chrome 中的服务器返回的字节码
- javascript - 将数据从 java 发送到 javascript 页面到 href 函数中
- android - (Flutter):如何使用 DraggableScrollableSheet 捕捉拖动事件
- asp.net - ASP.net SessionState 范围
- jpa - 对于@SpringBootTest,为什么我会告诉我“配置错误:发现@BootstrapWith 的多个声明”,即使我没有一个?
- delphi - 是否可以在 Python 上读取 FireDAC MemTable?