2011-11-01 103 views
1

我得到了一個在JScript.js文件中定義的js函數。該文件在主頁面上定義。我想從inIframe.aspx頁面調用這個文件中的sayhello函數。這個inIframe.aspx在webform1.aspx頁面內運行,webform1.aspx頁面有一個名爲masterWithJs.master的主頁面。錯誤:window.parent.sayhello不是一個函數?

時,我打:

http://localhost:8022/inIframe.aspx 

我的螢火得到一個腳本錯誤:

window.parent.sayhello is not a function 

母版:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="masterWithJs.master.cs" 
    Inherits="IFrameJS.masterWithJs" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <asp:ContentPlaceHolder ID="head" runat="server"> 
     <script src="Scripts/JScript1.js" type="text/javascript"></script> 
    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
     </asp:ContentPlaceHolder> 
    </div> 
    </form> 
</body> 
</html> 

WebForm1.aspx的

<%@ Page Title="" Language="C#" MasterPageFile="~/masterWithJs.Master" AutoEventWireup="true" 
    CodeBehind="WebForm1.aspx.cs" Inherits="IFrameJS.WebForm1" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
    <iframe id="myIframe" runat="server"></iframe> 
</asp:Content> 

inIframe.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="inIframe.aspx.cs" Inherits="IFrameJS.inIframe" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     this is the iframe page 
    </div> 
    </form> 
    <script type="text/javascript"> 
     window.parent.sayhello(); 
    </script> 
</body> 
</html> 

JScript1.js

function sayhello() { 
    alert('hello'); 
} 

WebForm1.aspx的behindcode:

public partial class WebForm1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      myIframe.Attributes.Add("src","inIframe.aspx"); 
     } 
    } 

回答

1

那好吧,我想我知道解決的辦法

試圖創建腳本的路徑的效用函數保持你叫 這樣一個

public static string ReferenceScript(string scriptFile) 
    { 
     //this line is just an example "~/include/js/" of the path of the js file 
     var filePath = VirtualPathUtility.ToAbsolute("~/include/js/" + scriptFile); 
     return "<script type=\"text/javascript\" src=\"" + filePath + "\"></script>"; 
    } 

,然後函數調用它的母版頁HTML 在正文的開頭

//EtPortalEntities.um_utility is an instanse of my name space you should put yours 
<%= EtPortalEntities.um_utility.ReferenceScript("jquery.js")%> 

,然後嘗試我想,如果它的所有關於路徑它應該工作s,因爲我認爲

Regards

+0

謝謝大家!該腳本文件沒有根據螢火蟲加載,現在它! – user603007

1

您需要從WebForm1中刪除內容標記爲 「頭」 ContentPlaceholderID。 aspx頁面。

0

我認爲你正在尋找

window.opener.sayhello(); 
+0

'window.opener'用於打開的窗口。 「window.parent」對於嵌入式框架是正確的。 –

0

你不需要window.parent位都:

在你inIframe.aspx文件,只需調用函數與

<script type="text/javascript"> 
    sayhello(); 
</script> 

JavaScript引擎將從它已經加載的所有腳本文件/節中找到'sayHello'函數。

+0

在我的應用程序中,即使腳本已連接,它也不起作用。 – user603007

2

webform1.aspx頁面刪除空的Content控制與ContentPlaceHolderID="head"

當頁面中有Content控件時,它將替換母版頁中ContentPlaceHolder中的內容,以便不包含Javascript文件。

相關問題