在 Vue3 中使用 secondary.html 動態啟動應用程式
P粉354948724
P粉354948724 2024-03-29 11:54:52
0
1
353

我正在開發一個 vue3 專案。

main.js;

import { createApp } from "vue";
import App from "./App.vue";
const app = createApp(App);
import store from "./store";
app.use(store);
import router from "./router/index";
app.use(router);
...

//just try...
app.mount("#app");

和我的 public/index.html

#
<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= htmlWebpackPlugin.options.title %></title>

    <style>
        body {
            margin: 0px;
        }
    </style>
</head>
<body>
    <noscript>
        <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
</body>
</html>

還有我的 App.vue;

<template>
        <button @click=openNewPage()>create new page</button>
        <span>{{message}}</span>
        <router-view />
    </template>
    <script>
        methods:{
            openNewPage(){
                var t = window.open('second.html','newMonitor','height=700,width=700,left=100,top=100,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no, status=yes');
    
            }
        }
    </script>

我的商店物件;

export default createStore({
    state: {
      message:'Hello'
    }
});

和我的第二個.html;

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="Cache-Control" content="no-store" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
    <title></title>
</head>
<body>
    <div id="appSecond" style="height:100%">
        <template>
            <span>{{message}}</span>
        </template>
    </div>
</body>
</html>

當我使用 OpenNewPage 方法打開第二個螢幕時,我無法存取商店對象,並且我想要使用的元件不起作用。我正在嘗試;

第二個.js

const app2 = createApp({
});

export { app2 };

和我的方法

import { app2 } from "../second.js";
openNewPage(){
    var t = window.open('second.html','newMonitor','height=700,width=700,left=100,top=100,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no, status=yes');
    
    if (t) {
        t.onload = function () {
        t.window.app = app2;
        app2.mount("#appSecond");
        }
    }
}

不知何故,我嘗試在 secondary.html 中運行,但收到​​類似「[Vue warn]:無法安裝應用程式:安裝目標選擇器」的警告。無論如何,代碼不起作用。你能幫我嗎?

P粉354948724
P粉354948724

全部回覆(1)
P粉514001887

openNewPage() 無法為新開啟的頁面執行腳本;只有新頁面可以執行自己的腳本。當 openNewPage() 嘗試 app2.mount() 時,它在自己的頁面(而不是新頁面)上運行該程式碼,從而導致您觀察到的錯誤。

解決方案

刪除openNewPage()中的掛載程式碼,使其只開啟新頁面:

export default {
  openNewPage() {
    window.open('second.html', …);
  }
}

更新second.html以載入掛載應用程式的腳本,並刪除<div id="appSecond">中不必要的<template>

  
{{message}}
sssccc

second.js 中,新增安裝您的應用程式的程式碼:

// second.js
import { createApp } from 'vue'
import App from './App.vue'
import store from './store'

createApp(App).use(store).mount('#appSecond')
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板