回发在 Firefox 中无法用于 asp.net(C#) 页面

Posted

技术标签:

【中文标题】回发在 Firefox 中无法用于 asp.net(C#) 页面【英文标题】:Post back not working in Firefox for asp.net(C#) pages 【发布时间】:2015-02-17 04:07:20 【问题描述】:

我在使用 Mozilla firefox 时遇到问题。

我正在使用 asp.net 语言开发一个网站,并且我在表单中有一个按钮。当我单击 onclick 属性上的按钮时,我正在调用一个函数,并且该函数正在执行回发。

这个场景正在运行 chrome 和 internet explorer。但它不适用于 Mozilla Firefox。我在控制台中收到此错误:TypeError: access to strict mode caller function is censored..

我的示例按钮是:

<input id="Button1" type="button" onclick="sampleFunc('sample');" value="button" />

我的示例函数是:

function sampleFunc(reqMessage)

  __doPostBack('', reqMessage);

我在网上搜索过。很多人有rhis问题,但没有任何解决方案。

你对这个错误有什么解决方案吗(!)

编辑 1: 我在 jquery 网站上找到了 ticket。根据勾选,他们修复了那个错误。但是我应用了相同的解决方案,但我的错误仍在继续。 :(

【问题讨论】:

尝试将按钮ID与帖子一起发送,即__doPostBack(ButtonID, reqMesage).. 您是在使用 我正在使用 hrml 按钮。我的意思是 使用浏览器的开发者工具,在所有包含的脚本中搜索"use strict"。有没有发生? 我已经为此创建了一个bug report。 【参考方案1】:

ASP.Net ScriptManager 代码在 __doPostBack 中使用“caller.callee”向上遍历调用堆栈以检测无限递归。如果调用堆栈中的任何函数被解析为应用了“use strict”,这将在 FireFox 上失败。 解决方法是在“use strict”范围之外有一个调用setTimeout() 的函数来调用调用__doPostBack 的函数。 setTimeout() 让您脱离调用堆栈。

【讨论】:

在这里找到了解决方案:***.com/a/25686598/12919 并且它有效,但我想了解为什么它有效,所以一直在寻找,直到我找到你的答案。谢谢你的解释。【参考方案2】:

我终于找到了答案。

我正在使用alertfy javascript 库来弹出消息。该库正在使用“使用严格”表达式。

我从这个库中删除了这个表达式,现在没有问题了。我的代码适用于所有浏览器。

【讨论】:

这让我免于被解雇。在我的情况下,我必须下载 jquery 3.x CDN 以在我的项目中本地引用它,然后删除 Use strict; 的所有实例。 alertify javascript 库中必须使用“Use strict”表达式。实际上,该表达式必须在所有 javascript 文件中使用。它组织 javascript 文件。我认为,有一些异常或错误代码是 alertify js。由于这个原因,我们得到了一个错误。所以,我们现在必须删除那个表达式。【参考方案3】:

我的建议是保持 javascript 和 html 分开..而不是使用内联调用你可以试试这个方法

请注意,您必须加载 jquery 才能使其工作。

例如:

<script>
$(document).ready(function()


     $(#Button1).click(function()
      
        PostBack();

        );

);

</script>
    <input id="Button1" type="button" value="button" />

【讨论】:

【参考方案4】:

我有一个好消息,这个问题可能在最新的 Firefox 和 jQuery 3.5.1 中得到修复。 我今天测试了报告的场景以及与“使用严格”规则相关的其他 __doPostBack 问题场景,所有这些场景似乎都可以正常工作,没有任何 JS 错误。

您在使用最新的 jQuery 3.5.1 和最新的 Firefox 84.0.2 时仍然遇到这个问题吗?

【讨论】:

Web UI JS 框架增强了很多。我不再使用 PostBack 了 :)【参考方案5】:

这是一种解决方法 -

将服务器端按钮控制器添加到您的 aspx 页面 -

<asp:Button id="btn" runat="server" onclick="btn_click_event" ClientIDMode="static"/>

在您的代码隐藏页面 (aspx.cs) 上定义将在回发后执行实际工作的事件方法。 现在隐藏这个按钮控制器。

<asp:Button id="btn" runat="server" onclick="btn_click_event"  ClientIDMode="static" style="display:none" />

不要使用Visible=false,因为它根本不会呈现按钮。

现在将您的 javascript 函数更改为仅在 `btn' 上调用 click

function sampleFunc()

    $('#btn').click();

并在您的 HTML 输入按钮 onclick 方法中调用此函数 -

<input id="Button1" type="button" onclick="sampleFunc();" value="button" />

【讨论】:

以上是关于回发在 Firefox 中无法用于 asp.net(C#) 页面的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 部分回发上的 Chrome 自动填充(更新面板)

ASP.Net 脚本控件,从 OnClick 和 FireFox 返回 False

回发在 Windows 7 的 Safari 中不起作用

asp .net背景图像在回发时闪烁

ASP.NET 在 asp:ImageButton 上没有回发

ASP.NET,使用 .Controls.Add() 添加的控件在页面回发时丢失,如果我使用 .InnerHtml 添加它们,我无法引用它们