Chrome浏览器中弹窗的location.reload()方法无法正常工作求助
解决Chrome中弹窗
location.reload()失效的问题 你这个XSS payload测试的思路很实用,但Chrome对空白弹窗的安全限制确实会绊住location.reload(),我给你几个针对性的解决办法:
问题根源
当你用window.open()打开默认的空白弹窗(about:blank)时,Chrome会把这个页面标记为无origin的特殊状态。哪怕你动态写入了HTML内容,页面的origin还是保持about:blank,这时候调用location.reload()会被浏览器的安全策略拦截——它没法确认这个页面的合法来源。
可行解决方案
1. 用location.href替代location.reload()
这是最省心的临时解决办法,直接把弹窗的location.href设为当前URL,效果和刷新完全一致,还能绕过Chrome的限制:
// 替换原来的 popup.location.reload() popup.location.href = popup.location.href;
2. 使用同源的空白页面
先创建一个本地空白HTML文件(比如命名为test-blank.html),内容就这么简单:
<!DOCTYPE html> <html> <body> </body> </html>
然后打开弹窗时指向这个文件,这样弹窗和你的测试页面同源,location.reload()就能正常工作了:
function create_window_window_opt() { if(payloads.length > 0) { var popup = window.open('test-blank.html'); // 等弹窗加载完成再操作 popup.onload = function() { popup.focus(); var payload = "<!DOCTYPE html>" + payloads.shift() + "<script>...</script>"; popup.document.write(payload); popup.document.close(); // 现在reload可以正常执行 popup.location.reload(); }; } }
3. 重新写入payload代替刷新
如果你的测试目的只是验证payload在页面加载时的效果,其实没必要刷新弹窗,直接清空文档后重新写入payload就能模拟刷新后的场景:
// 清空弹窗文档并重新写入payload popup.document.open(); popup.document.write(payload); popup.document.close();
额外提醒
- 记得确认Chrome允许你的测试页面弹出窗口,不然
window.open()会被拦截,后续操作全白搭。 - 如果payload里包含跨域资源,可能还是会触发Chrome的安全限制,建议尽量在同源环境下测试XSS payload。
内容的提问来源于stack exchange,提问作者Login
相关产品推荐
相关产品推荐

