我正在开发 PrimeFaces 6.0、JSF 2.2 (Mojarra 2.2.7) 应用程序。
我需要从外部站点加载网页并突出显示 DOM 节点。我的方法是创建一个 JavaScript 函数来打开一个弹出窗口,通过 servlet 加载网页(以避免跨域问题)并突出显示节点。我发送给我的函数的参数是在托管 bean 中生成的。
我尝试以两种不同的方式这样做:
- 在我的行动中使用
RequestContext.getCurrentInstance().execute("myFunction(...)")
(是的,我正在使用 PrimeFaces)。 oncomplete="#{myBean.myJsCall}"
在我的命令按钮上使用。
两种方式都执行调用并且调用都是正确的,但是我遇到了浏览器的(Chromium)弹出窗口阻止程序:
有没有办法在 JSF 或特别是 PrimeFaces 中打开弹出窗口而不会被阻止?
这并不相关,但这是我的 JavaScript 函数的简化版本。
我使用纯 HTML 和 JS 开发了这个脚本。在那里,它在没有阻止程序干扰的情况下打开弹出窗口。此外,在运行 JSF 应用程序时将调用粘贴到控制台时,会打开弹出窗口。
function myFunction(url, selector) {
var popup = window.open("", "popup", "height=500,width=700");
var req = new XMLHttpRequest();
req.open("GET", url, true);
req.onreadystatechange = function() {
if (req.readyState === XMLHttpRequest.DONE) {
popup.document.open();
popup.document.write(req.responseText);
popup.document.close();
popup.document.addEventListener(
"DOMContentLoaded",
function() { /* Some code highlighting the selector */ },
false
);
}
}
req.send();
}