在线程或者Timer中如何调用js中的函数
winfrom中用webbrowser嵌入html网页
在正常情况下调用是没有问题的
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
private void button2_Click(object sender, EventArgs e)
{
bmapBrowser.Document.InvokeScript("showMarker", new object[] { num });
}
但是在线程中调用会报错
System.Timers.Timer t = new System.Timers.Timer(1000);
t.Elapsed += new System.Timers.ElapsedEventHandler(theout);
t.AutoReset = true;
t.Enabled = true;
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
private void theout(object source, System.Timers.ElapsedEventArgs e)
{
bmapBrowser.Document.InvokeScript("showMarker", new object[] { num });
}
我试着调用了以下不带参数的方法 如bmapBrowser.Document.InvokeScript("clear"); 一样会报错 初步判断在线程中不可调用js的函数 求解决方法 拜谢
------解决方案--------------------
js:
<script type="text/javascript">
function ss() {
alert("底层调用js,调用成功!");
}
//这个方法用了调用隐藏按钮
function xx() {
document.getElementById("Button2").click();
}
</script>
html:
<asp:Button ID="Button1" runat="server" Text="底层调用js" onclick="Button1_Click" />
<hr />
<input type="button" value="js调用底层" onclick="xx();" />
<asp:Button ID="Button2" runat="server" Text="我是隐藏按钮" onclick="Button2_Click" style="display:none;"/>
<hr />
CS:
//底层调用js
protected void Button1_Click(object sender, EventArgs e)
{
Page.ClientScript.RegisterStartupScript(ClientScript.GetType(), "gg", "<script>ss(); </script>");
}
//后台方法
public void showval()
{
Response.Write("js调用后台方法成功!");
}
//隐藏按钮事件
protected void Button2_Click(object sender, EventArgs e)
{
showval();
}