I would like to ask you about developing a management system for H5 games. I want to synchronize the content of the page elements in the iframe in real time when inputting content in the background. I would like to know what technology can be used to achieve this? Can vue and angular achieve this?
The effect is as follows:
人生最曼妙的風(fēng)景,竟是內(nèi)心的淡定與從容!
parent.html
<p id="app">
<input type="text" v-model="item.name" />
<input type="checkbox" v-model="item.check" />
<input type="date" v-model="item.date" />
<iframe ref="iframe" src="child.html" @load="load"></iframe>
</p>
<script src="http://cdn.bootcss.com/vue/2.1.8/vue.min.js"></script>
<script>
window.app = new Vue({
el: '#app',
data() {
return {
item: {
name: null,
check: false,
date: null,
},
}
},
methods: {
load: function (item) {
const app = this.$refs.iframe.contentWindow.app;
if (app && app.setContent) {
app.setContent(this.item)
}
else {
window._item = this.item
}
}
}
})
</script>
child.html
<p id="app">
{{ item }}
</p>
<script src="http://cdn.bootcss.com/vue/2.1.8/vue.min.js"></script>
<script>
window.app = new Vue({
el: '#app',
data() {
return {
item: null,
}
},
created: function () {
this.setContent(window.parent.window._item);
},
methods: {
setContent: function (item) {
this.item = item;
}
}
})
</script>
Or pass the vuex store to use the same store for the vue instances of the two pages
If you use iframe, you can only use websocket to notify of updates. The two-way data of vue and ag can only be updated in real time on the same page
iframe is cross-page. It is extremely unsafe and impossible for others to use ng or vue to operate your page.
You can try postMessage.