我在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 77 中param === "View"是错误的! 但是,单独使用Chrome 77时,这并不是错误的。

我想通了! 问题是Chrome 77默认打开TrustedType API。 但是,如果Chrome 77通过Chromedriver启动,它就会关闭,这是一个非常令人讨厌的错误。

让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。

相关内容

  • 没有找到相关文章

最新更新