我有两页a.aspx
和b.aspx
。 a.aspx
有Iframe
,我在b.aspx
加载Iframe
页面。是否可以从javascript
拨打b.aspx
到a.aspx
?
提前致谢
答案 0 :(得分:1)
这样做的一种方法,也包括你有不同的外页来源和IFrame中的页面(例如http://site1/a.aspx
和http://site2/b.aspx
)的场景是使用{ {3}}功能。
如果您在{{1}中有一个名为a.aspx
的函数,那么您还可以“锁定”自b.aspx
和DoSomething
之间的API合约。如果你决定重命名你需要对两个页面(以及在IFrame中托管b.apx
的任何其他页面)进行更改的功能,那么这是从a.aspx
调用的。如果您使用a.aspx
方法,则您需要更改的唯一位置是postMessage
中“message”事件的监听器。
如果您将以下代码放入b.aspx
:
a.aspx
然后您可以通过以下方式调用它(可能是按下按钮进行测试):
function sendMessageToEveryIFrame(message)
{
/// <summary>Call a function against all frames</summary>
var frames = document.getElementsByTagName('iframe');
for (var i = 0; i < frames.length; i++)
{
try
{
var frame = frames[i];
frame.contentWindow.postMessage(message, "*");
}
catch (e)
{
// Code to handle errors would go here!
}
}
}
然后,您需要sendMessageToEveryIFrame('Test message!');
中的一些代码来响应来自的消息,例如:
b.aspx
当您按下浏览器中// This wires up your function that processes the message
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
// logic that reacts to the event/message goes here
alert(event.data);
}
中的按钮(或您用于触发呼叫的任何其他内容)时,a.aspx
会弹出一个包含文本“测试消息!”的警报窗口。
然后,您的b.aspx
函数可以发送请求并有效地充当代理。所以,如果你想要调用receiveMessage
内的两个函数,你可以像这样重新编写代码:
在b.aspx
:
a.aspx
这意味着function callFrameFunction(functionName, parameters)
{
/// <summary>Call a function against all frames</summary>
var frames = document.getElementsByTagName('iframe');
for (var i = 0; i < frames.length; i++)
{
try
{
var frame = frames[i];
var message =
{
Function: function,
Parameters : parameters
};
frame.contentWindow.postMessage(message, "*");
}
catch (e)
{
// Code to handle errors would go here!
}
}
}
有两个参数,一个函数的名称和函数的参数。然后,您将更新callFrameFunction
中的代码,使其看起来更像这样:
b.aspx
您可以通过调用函数替换对// This wires up your function that processes the message
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
// logic that reacts to the event/message goes here
switch(event.data.FunctionName)
{
case "function 1":
alert('Function called was \'function 1\'');
break;
case "function 2":
alert('Function called was \'function 2\'');
break;
}
}
的调用,并根据需要传入alert
中的值。
答案 1 :(得分:1)
假设您在b.aspx
中有以下javascript函数。
function DoSomething()
{
//Do you required tasks
}
你想在a.aspx
中调用此函数。 a.aspx
已加载b.aspx
和iframe,如下所示。
<iframe id="fraExample" name="fraExample" scrolling="no" src="b.aspx"></iframe>
您可以使用b.aspx
a.aspx
中编写的函数 DoSomething
function CallFunction()
{
// This function will be in a.aspx
// some tasks
var bFrame = document.getElementById('fraExample'); // Get the iframe
bFrame.contentWindow.DoSomething();
// some other tasks
}
这应该对你有用而且很容易!