子視窗呼叫父視窗的函數,函數名稱是否可以是變數
可以
以下為範例
a.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>A</title>
</head>
<body>
<button id = "btnOpen">Open</button>
</body>
<script>
window.myName = 'dragonH';
window.myFunc1 = () => {
alert('hello ithelp');
}
const btnOpen = document.querySelector('#btnOpen');
btnOpen.addEventListener('click', () => {
window.open('./b.html', 'B');
});
</script>
</html>
b.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>B</title>
</head>
<body>
</body>
<script>
opener.myFunc1();
console.log(opener.myName)
</script>
</html>
要注意的是
opener.myFunc1()
會在 parent window 執行
選我正解
感謝回覆,myFunc1 這個名稱可以是父視窗提供的名稱嗎,是不固定的。
(期望是父視窗呼叫子視窗,運作完後執行父視窗要求的父函數。所以函數名不固定。)
dragonH
感謝回覆,需求可能沒說很清楚,我用比較完整的程式碼描述好了
a.php
window.open("b.php?function_name=myfun1");
b.php
<?PHP
.....
echo "<input type='hidden' id='fun_name' value='$function_name'>";
?>
<script>
fun_name=document.getElementById('fun_name').value;
//fun_name='myfun1'
//想要執行父程式的 myfun1();
//若使用opener.myfun1(),則是固定的函數名稱myfun1
</script>
也就是呼叫子視窗時,會提供一個函數名稱。(子視窗呼叫不固定的函數)。
剛剛想到用PHP 把 opener.xxx() 這段語法刻出來,應該就可以達到目的。
想說有沒有其他的方式.
怎麼突然變 php 了
我不太知道你的目的
不過看看這是不是你要的
a.php
<button id = "btnOpen">Open</button>
<script>
const btnOpen = document.querySelector('#btnOpen');
btnOpen.addEventListener('click', () => {
window.open('./b.php?func_name=func1');
});
</script>
b.php
<?php
$func_name = $_GET['func_name'];
echo "<input type = 'hidden' id = 'funcName' value = '$func_name'/>";
?>
<script>
const funcName = document.querySelector('#funcName').value;
console.log(funcName)
</script>
如果 funcName=abc
那 opener.funcName() 是執行funcName這個名稱的函數,
要怎樣執行 opener.abc()呢?