从iframe调用javascript到aspx页面

时间:2017-07-27 09:03:02

标签: javascript asp.net iframe

我有两页a.aspxb.aspxa.aspxIframe,我在b.aspx加载Iframe页面。是否可以从javascript拨打b.aspxa.aspx? 提前致谢

2 个答案:

答案 0 :(得分:1)

这样做的一种方法,也包括你有不同的外页来源和IFrame中的页面(例如http://site1/a.aspxhttp://site2/b.aspx)的场景是使用{ {3}}功能。

如果您在{{1}中有一个名为a.aspx的函数,那么您还可以“锁定”自b.aspxDoSomething之间的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
}

这应该对你有用而且很容易!