google-chrome - 我在 Chrome 77 上的网站不加载任何数据,但在 Chrome 76 上运行良好
问题描述
更糟糕的是,我的测试通过了使用 Chrome 77 和 Chromedriver 77(测试通过,数据加载到网页等)。只有当我手动启动 Chrome 77 浏览器并对其进行测试时,它才会失败。
这基本上是我的代码在做什么:
// Get the query parameter "operation" from the URL
let match = new RegExp("[?&]operation=([^&]*)").exec(window.location.search);
let param = match && decodeURIComponent(match[1].replace(/\+/g, " "));
// Sanitize the URL from XSS Injection
let param = param ? window.DOMPurify.sanitize(param) : param;
if(param === "View") {
// Load data from the server
}
问题是在 Chrome 77param === "View"
中是假的!但单独使用 Chrome 77 时,这并不是错误的。
解决方案
我想到了!问题是 Chrome 77 默认开启 TrustedTypes API。但是如果通过 Chromedriver 启动 Chrome 77,它就会关闭,这是一个非常讨厌的错误。
让 Chrome 77 / Chromedriver 77 像手动点击页面一样失败的修复方法是启用此 chrome 功能:
--enable-blink-features=TrustedDOMTypes
你会把它放在你看到的同一个地方,--no-sandbox
或者--disable-infobars
。
伟大的!现在你的测试失败了。接下来,要修复错误,请更改此行:
// Sanitize the URL from XSS Injection
let param = param ? window.DOMPurify.sanitize(param) : param;
为此:
// Sanitize the URL from XSS Injection
let param = param ? (window.DOMPurify.sanitize(param) || "").toString() : param;
是最toString()
重要的部分。现在返回的是 TrustedType 对象,而不是 String。
推荐阅读
- cmake - 使用cmake将文件复制到多个依赖的目标二进制文件夹
- python-3.x - Jupyter Notebook从同一目录中的python文件导入类
- aws-api-gateway - 调用 HTTP API 时通过查询参数设置 SNS 消息属性
- android-studio - 如何使我的 Android 应用程序的其他网络可以访问本地 xampp
- azure - 如何在 Azure API 管理开发人员门户中禁用注册?
- php - 如何在 CodeIgniter 的 IF 条件下加载外部 CSS 样式表
- c# - TabControl 选项卡标题文本中的额外填充
- amazon-web-services - 使用 CloudFormation 创建 CodePipeline 通知规则
- android - onResume 被调用了很多次,即使它来到前台。为什么?
- fluentd - 无法以 root 用户身份启动 td-agent