Chrome 83 中取消的 HTTP 请求

HTTP requests canceled in Chrome 83

我在 asp.net 解决方案中对某些页面使用 telerik。 在起始页上,我有一些具有相同设计的按钮(它们被重定向到 aspx 页面)例如

<telerik:RadButton runat="server" ID="Button" NavigateUrl="Dest/Example.aspx"

自最近 chrome 更新 (v 83) 以来,所有请求均失败(状态已取消)。 始作俑者好像 }else{if(!e||e=="_self"){window.location.href=h;(telerik 资源)

有人有想法吗?感谢任何帮助。

所以我遇到了同样的问题,我认为这可能需要在浏览器级别解决,但在他们修复它之前,这里有一个对我有用的解决方法。我还测试了这不仅限于 telerik,asp 按钮也坏了。我们有很多具有此类代码的应用程序,将此代码添加到所有这些位置将是疯狂的。我想我们会看看 Chrome 是否会很快修复它。我还在 chrome 的关于页面上发送了 "report a problem" 并提到了这一点。

解决方案:

像这样将 OnClientClicking="OnClientClicking" 添加到您的按钮中:

<telerik:RadButton runat="server" ID="Button" NavigateUrl="Dest/Example.aspx" OnClientClicking="OnClientClicking" />

然后在 javascript 部分添加:(从 teleriks radbutton 演示代码中获取和修改)

<script>
OnClientClicking = function (sender, args) {
    var $ = $telerik.$;

    if (sender.get_navigateUrl() && sender.get_buttonType() == Telerik.Web.UI.RadButtonType.LinkButton) {
        var url = sender.get_navigateUrl()
        //radopen(url, url);
        window.location.href = url;
        args.set_cancel(true);
    }
};
</script>

希望对您有所帮助!

您也可以使用 RadPushButton and/or RadLinkBut​​ton 代替 RadButton 来解决这个问题。它们是 RadButton 的现代版本。

更新:问题已在 R2 2020 SP1 中修复。 R3 2020 也将进行改进,将于 2020 年 9 月 16 日发布。

似乎 Google Chrome 版本 84 的更新修复了这个问题,旧版本再次正常工作。能否确认一下?

此外,如果您使用的是 R2 2020 SP1 版本并遇到问题,您可以尝试恢复回传功能的原始行为。

您也可以在反馈入口中订阅和分享您的场景:

恢复 pre-service 包版本:

将以下脚本放在页面的ScriptManager下。

Telerik.Web.UI.Button.PostbackFunctionality.prototype.clicked = function (ev) {
    var that = this;
    var baseResult = that.base.clicked(ev);

    that._isInput = that._isEventTargetButton(ev);

    //FIX: The AjaxManager does not update the affected update panels when the default button fires the click under IE browsers,
    //so we need to set _activeDefaultButtonClicked to null, in order to for the Ajax to work
    var requestManager = Sys.WebForms ? Sys.WebForms.PageRequestManager.getInstance() : null;
    if (requestManager) requestManager._activeDefaultButtonClicked = true;

    // old version code
    var pbResult = that.options.autoPostBack ? that._postback() : false;

    // new version code
    //var pbResult = that.options.autoPostBack;
    //var isNavigating =
    //    (that.options.buttonType == 1
    //        || that.options.buttonType == 4)
    //    && that.options.navigateUrl != "";

    //if (pbResult && !isNavigating) {
    //    that._postback();
    //}
    //else {
    //    pbResult = false;
    //}

    if (requestManager) requestManager._activeDefaultButtonClicked = false;

    delete that._isInput;

    return (baseResult && pbResult);
}