window.addEventListener写成共同方法父窗口调用返回值
时间: 2023-10-18 18:10:34 浏览: 108
如果您想在父窗口中调用共同方法并获取返回的结果,可以使用下面的代码示例:
```javascript
function addEventListenerAndReturnResultToParent(eventName, callback) {
window.addEventListener(eventName, function(event) {
var result = callback(event); // 调用回调函数获取结果
window.parent.postMessage(result, '*'); // 将结果发送给父窗口
});
}
function callChildWindowMethodAndReceiveResult(methodName, callback) {
window.addEventListener('message', function(event) {
if (event.data.methodName === methodName) { // 判断消息是否为指定的方法
var result = event.data.result;
callback(result); // 调用回调函数处理结果
}
});
var message = { methodName: methodName };
window.frames[0].postMessage(message, '*'); // 向子窗口发送消息
}
```
在这个共同方法中,我们添加了一个新的方法 callChildWindowMethodAndReceiveResult(),它接受两个参数:方法名称和回调函数。这个方法首先添加一个 message 事件监听器,以便在子窗口调用 postMessage() 方法时接收结果。然后,它向子窗口发送一个包含方法名称的消息。在子窗口中,您需要使用 window.addEventListener() 方法监听 message 事件,并检查消息是否为指定的方法。如果是,您可以调用回调函数处理结果。
例如,如果您想在父窗口中调用子窗口中的一个 addNumbers() 方法,并获取它的结果,可以这样使用这个方法:
```javascript
callChildWindowMethodAndReceiveResult('addNumbers', function(result) {
console.log('子窗口返回的结果是:' + result);
});
```
在这个例子中,我们将方法名称 addNumbers 作为第一个参数传递给 callChildWindowMethodAndReceiveResult() 方法,并在回调函数中处理结果。在子窗口中,您需要定义一个名为 addNumbers() 的函数,并在其中计算结果并使用 postMessage() 方法将结果发送回父窗口:
```javascript
function addNumbers(a, b) {
var result = a + b;
window.parent.postMessage({ methodName: 'addNumbers', result: result }, '*');
}
```
在这个例子中,我们将计算结果作为对象 { methodName: 'addNumbers', result: result } 发送回父窗口。父窗口可以像之前的示例一样使用 window.addEventListener() 来监听这个事件,并获取发送的结果。
阅读全文