【问题标题】:My site doesn't work after the update Chrome 83更新 Chrome 83 后我的网站无法运行
【发布时间】:2020-05-22 09:36:28
【问题描述】:

所以,我在 ext.net 1.7(最新版本)上有网站,但更新后我的网站无法正常工作。 Chrome 控制台没有显示错误。它只是没有工作。但它适用于以前版本的 Chrome。 WebConsoleErrors

我阅读了有关 Chrome 的更改,但没有发现任何问题。 有谁知道问题出在哪里?

【问题讨论】:

    标签: google-chrome webforms ext.net


    【解决方案1】:

    试试这个

    (function () {
    	function isChromium() {
    		var isChromium = window.chrome;
    		var winNav = window.navigator;
    		var isIOSChrome = winNav.userAgent.match("CriOS");
    
    		if (isIOSChrome)
    			return true;
    		else if (isChromium !== null && typeof isChromium !== "undefined")
    			return true;
    		else
    			return false;
    	}
    
    	if (isChromium()) {
    		Ext.override(Ext.data.Connection, {
    			doFormUpload: function (o, ps, url) {
    				var me = this;
    				var doc = document;
    				var form = Ext.getDom(o.form);
    				var hiddens = [];
    				var hd;
    
    				Ext.iterate(Ext.urlDecode(ps, false), function (k, v) {
    					hd = doc.createElement('input');
    					Ext.fly(hd).set({
    						type: 'hidden',
    						value: v,
    						name: k
    					});
    					form.appendChild(hd);
    					hiddens.push(hd);
    				});
    
    				var formData = new FormData(form);
    
    				function successCallback(data) {
    					var r = {
    						responseText: '',
    						responseXML: null,
    						argument: o.argument
    					};
    
    					if (data) {
    						var match = /<textarea>(.+)<\/textarea>/i.exec(data);
    						if (match != null && match.length >= 2) {
    							r.responseText = match[1];
    						} else {
    							r.responseText = data;
    						}
    
    						r.responseXML = $.parseXML(data);
    					}
    
    					me.fireEvent("requestcomplete", me, r, o);
    
    					function runCallback(fn, scope, args) {
    						if (Ext.isFunction(fn)) {
    							fn.apply(scope, args);
    						}
    					}
    
    					runCallback(o.success, o.scope, [r, o]);
    					runCallback(o.callback, o.scope, [o, true, r]);
    				}
    
    				$.ajax({
    					type: 'POST',
    					url: url,
    					data: formData,
    					processData: false,
    					contentType: false,
    					success: successCallback,
    					error: function () {
    						console.log(arguments);
    					}
    				});
    
    				Ext.each(hiddens, function (h) {
    					Ext.removeNode(h);
    				});
    			}
    		})
    	}
    })();
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.5.1/jquery.min.js"&gt;&lt;/script&gt;

    您应该在加载 extjs 后在所有页面的正文中插入当前脚本

    【讨论】:

    • 您能解释一下这段代码的作用以及为什么它可以解决问题吗?
    • 当前脚本覆盖旧版本中表单请求 docs.sencha.com/extjs/3.4.0/source/… 的标准行为,提交是通过 form.submit()。在新版本的浏览器中,该操作不会立即执行,可以通过以下请求停止。脚本提交表单并通过ajax请求接收响应
    • 你好@НикитаДанилов!首先非常感谢您的补丁和解释。我们刚刚遇到了这个问题,您的洞察力为这个问题提供了很多启示。实际上,很多人已经遇到了 Chrome 83 升级的问题:) 无论如何。我们使用 Ext.NET 4.1,我们真的不想额外使用 jQuery。 1. 你认为有办法恢复旧的 Chrome 行为作为补丁吗? 2. 你认为 Chrome 团队会认为这是一个 bug 并自行修复吗?
    • @daniil-veriga,对于当前情况,您可以尝试在 ext.ajax.request 上替换 jquery ajax 请求。例如stackoverflow.com/questions/16273286/…。此外,我没有向开发团队询问这个重大变化。也许这是一个错误,但我们的生产站点不能等待它被修复
    • 如果有人向 Google 团队报告此问题,我将不胜感激
    猜你喜欢
    • 1970-01-01
    • 2016-12-30
    • 2020-09-12
    • 2016-09-01
    • 1970-01-01
    • 2020-11-11
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多