2024-10-01 11:58:55 +08:00
|
|
|
<?php
|
|
|
|
header("Access-Control-Allow-Origin: *");
|
|
|
|
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
|
|
|
|
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
|
|
|
|
header("Allow: GET, POST, OPTIONS, PUT, DELETE");
|
|
|
|
?>
|
|
|
|
<!DOCTYPE html>
|
|
|
|
<html lang="en">
|
|
|
|
|
|
|
|
<head>
|
|
|
|
<meta charset="UTF-8">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
<title>DevStar Home</title>
|
|
|
|
</head>
|
|
|
|
|
|
|
|
<body>
|
2024-10-12 11:38:28 +08:00
|
|
|
<iframe
|
|
|
|
id="embedded-devstar"
|
|
|
|
src="http://localhost:8080/test/home.html"
|
2024-10-01 11:58:55 +08:00
|
|
|
width="100%"
|
2024-10-12 11:38:28 +08:00
|
|
|
height="100%"
|
2024-10-01 11:58:55 +08:00
|
|
|
frameborder="0"
|
|
|
|
style="border: 0; left: 0; right: 0; bottom: 0; top: 0; position:absolute;">
|
|
|
|
</iframe>
|
|
|
|
|
2024-10-12 11:38:28 +08:00
|
|
|
<!-- <iframe
|
|
|
|
id="embedded-devstar"
|
|
|
|
src="https://www.devstar.cn/spa.html"
|
2024-10-01 11:58:55 +08:00
|
|
|
width="100%"
|
|
|
|
height="100%"
|
|
|
|
frameborder="0"
|
|
|
|
style="border: 0; left: 0; right: 0; bottom: 0; top: 0; position:absolute;">
|
|
|
|
</iframe> -->
|
2024-10-12 11:38:28 +08:00
|
|
|
|
2024-10-01 11:58:55 +08:00
|
|
|
<script>
|
|
|
|
const vscode = acquireVsCodeApi();
|
|
|
|
|
|
|
|
function firstOpenRemoteFolder() {
|
|
|
|
vscode.postMessage({ command: 'firstOpenRemoteFolder', host: host, username: username, password: password, port: port, path: path });
|
|
|
|
}
|
|
|
|
|
|
|
|
function openRemoteFolder() {
|
|
|
|
vscode.postMessage({ command: 'openRemoteFolder', host: host, path: path });
|
|
|
|
}
|
|
|
|
|
|
|
|
function firstOpenRemoteFolderWithData(host, username, password, port, path) {
|
|
|
|
vscode.postMessage({ command: 'firstOpenRemoteFolder', host: host, username: username, password: password, port: port, path: path });
|
|
|
|
}
|
|
|
|
|
|
|
|
function openRemoteFolderWithData(host, path) {
|
|
|
|
vscode.postMessage({ command: 'openRemoteFolder', host: host, path: path });
|
|
|
|
}
|
|
|
|
|
2024-10-12 11:38:28 +08:00
|
|
|
|
|
|
|
async function biCommunication2Vscode(command, data) {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
// request to vscode
|
|
|
|
vscode.postMessage({ command: command, data: data })
|
|
|
|
|
|
|
|
function handleResponse(event) {
|
|
|
|
const jsonData = event.data;
|
|
|
|
if (jsonData.command === command) {
|
|
|
|
// return vscode response
|
|
|
|
console.log("biCommunication2Vscode", jsonData.data)
|
|
|
|
window.removeEventListener('message', handleResponse) // 清理监听器
|
|
|
|
resolve(jsonData.data)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
window.addEventListener('message', handleResponse)
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
window.removeEventListener('message', handleResponse)
|
|
|
|
reject('timeout')
|
|
|
|
}, 5000); // 5秒超时
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2024-10-01 11:58:55 +08:00
|
|
|
// 监听子页面的消息
|
2024-10-12 11:38:28 +08:00
|
|
|
window.addEventListener('message', async (event) => {
|
2024-10-01 11:58:55 +08:00
|
|
|
// 出于安全考虑,检查 event.origin 是否是你预期的源
|
|
|
|
// if (event.origin !== "http://expected-origin.com") {
|
|
|
|
// return;
|
|
|
|
// }
|
|
|
|
try {
|
2024-10-12 11:38:28 +08:00
|
|
|
const jsonData = event.data;
|
|
|
|
if (jsonData.action === 'firstOpenRemoteFolder') {
|
|
|
|
console.log('Received message:', jsonData);
|
|
|
|
firstOpenRemoteFolderWithData(jsonData.host, jsonData.username, jsonData.password, jsonData.port, jsonData.path);
|
|
|
|
|
|
|
|
} else if (jsonData.action === 'openRemoteFolder') {
|
|
|
|
console.log('Received message:', jsonData);
|
|
|
|
openRemoteFolderWithData(jsonData.host, jsonData.path);
|
|
|
|
|
|
|
|
} else if (jsonData.action === 'getUserToken') {
|
|
|
|
// request user token from vscode global state
|
|
|
|
const data = await biCommunication2Vscode('getUserToken', {})
|
|
|
|
var iframe = document.getElementById('embedded-devstar');
|
|
|
|
if (iframe && iframe.contentWindow) {
|
|
|
|
iframe.contentWindow.postMessage({ action: 'getUserToken', data: data}, '*');
|
|
|
|
}
|
|
|
|
} else if (jsonData.action === 'setUserToken') {
|
|
|
|
// set user token to vscode global state
|
|
|
|
await biCommunication2Vscode('setUserToken', jsonData.data)
|
|
|
|
.then((data) => {
|
|
|
|
console.log(data)
|
|
|
|
var iframe = document.getElementById('embedded-devstar');
|
|
|
|
if (iframe && iframe.contentWindow) {
|
|
|
|
iframe.contentWindow.postMessage({ action: 'setUserToken', data: data}, '*');
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch((err) => {
|
|
|
|
if (iframe && iframe.contentWindow) {
|
|
|
|
iframe.contentWindow.postMessage({ action: 'setUserToken', data: {ok: false}}, '*');
|
|
|
|
}
|
|
|
|
});
|
2024-10-01 11:58:55 +08:00
|
|
|
}
|
|
|
|
} catch (error) {
|
|
|
|
console.error('Error parsing message:', error);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
</script>
|
|
|
|
</body>
|
|
|
|
</html>
|