从服务器执行一个简单的window.open脚本
问题描述:
我有一个动态创建的菜单,我有一个menuItemClick事件绑定在这个事件中,我想执行一个简单的window.open脚本,使用点击项目的url。我需要这样做的原因是我需要设置窗口打开的参数(即没有滚动条,没有工具栏等)。从服务器执行一个简单的window.open脚本
我的问题是,有没有办法简单地创建一个脚本的字符串来执行,然后实际执行它?
到目前为止,我有:
string script = "window.open('" + e.Item.NavigateUrl + "' ,'_MAIN_WINDOW','width='+ screen.width + '-60,height=' + screen.height + '-500,left=' + screen.left + '-30,top=' + screen.top + '-30,screenx=0,screeny=0,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,copyhistory=no, resizable=yes')";
但我不知道如何再执行这个脚本。
答
你会想要使用Page.ClientScript.RegisterStartupScript(或ScriptManager.RegisterStartupScript如果你需要它在部分回发后运行)。
答
重写页面的OnPreRender事件。
里面有你做:
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
foreach (MenuItem item in m1.Items) // m1 is the menu in my case :)
{
item.Target = string.Format("window.open('{0}');", item.NavigateUrl);
}
}
答
你可以把window.open(...)代码调用onButtonClick(项目)的JavaScript函数内部,并与发出的RegisterStartupScript它()一样bdukes建议,然后在该页面的ASPX代码,你可以添加一个事件处理程序像
<a id="bla" onclick="javascript:onButtonClick(this);" >Dummy item</a>
然后当你点击该项目,onButtonClick将与点击的项目作为参数调用。
我试过这个,但我需要在ItemClick时执行它。当我在itemClick注册时,它不会执行,直到下一个回传。 – 2009-01-12 17:53:12