在 USD 托管控件中打开弹出窗口 window 而不是新的 tab/window
Open popup window instead of new tab/window in USD hosted control
如何在 USD 托管控件中打开弹出窗口 window?
Javascript代码:
<script>
function basicPopup(url) {
popupWindow = window.open(url,'popUpWindow','height=300,width=700,left=50,top=50,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no, status=yes')
}
</script>
<a href="https://www.google.com" onclick="basicPopup(this.href);return false">Open a popup window</a>
USD Window 导航规则
路由类型 - 弹出窗口,操作 - 显示在外部,目标 - 选项卡
托管类型:边缘Process/Chrome进程。
问题:在浏览器中启动上述 JS 片段时,它按预期工作(弹出窗口以给定尺寸打开,子 window 能够与父 window 和 Post 消息)而相同的代码与 USD 集成,弹出窗口在新选项卡中启动并且新打开 window 无法与父 window 通信(window.open ()returns空)
关于我遗漏了什么有什么想法吗?
有可能他们根本不允许弹出窗口,就像代码片段中的 SO 一样。
您可以在控制台中查看。
这是一个包含更多信息的版本 - 请注意,由于沙盒,此版本不会在 SO 处弹出任何内容
注意 如果内容来自不同 起源
document.getElementById("popupDiv").addEventListener("click", function(e) {
const tgt = e.target.closest("a");
if (tgt && tgt.classList.contains("popup")) {
const popupWindow = window.open(tgt.href, tgt.target, 'height=300,width=700,left=50,top=50,resizable,scrollbars,toolbar,status');
if (popupWindow) {
console.log("Popup allowed");
e.preventDefault(); // cancel the actual link
} else console.log("Not allowed to pop, target used instead")
}
})
<div id="popupDiv">
<a href="https://www.google.com" target="popopWindow" class="popup">Open a popup window</a>
</div>
如果您让 USD 托管您的所有浏览器进程并统一您的浏览器类型,您也许可以根据需要访问您的父级 windows。
创建一个可以接收目标导航的“目标”/“子”托管控件。使所有浏览器 Chrome,如果您出于某种原因不能这样做,希望您可以将它们全部改为 Edge。在您的 Window 导航规则中,使用操作路由 Window 而不是显示外部,并将目标选项卡设置为新的子浏览器托管控件。如果您不想将子浏览器作为 MainPanel 选项卡托管,请将其放在 FloatingPanel 上。
此外,并非多余,但注意到上面的“Chrome/Edge”混合托管摘要后,我建议尽可能多地消除在整个配置中托管多种浏览器类型.我假设 USD 托管的浏览器移交给“Windows 托管”浏览器可能会使(阻止?)您找到父 window 的能力复杂化,即使浏览器类型在 USD 内部和外部是相同的。据我所知,USD 和 Windows 使用不同版本的 Edge(USD 尚未集成新的 Edge,而且可能永远不会)并且 USD 管理自己的 Chromium 实例。我假设 Chrome 中的“Show Outside”不会从您的 USD 应用程序文件夹启动新的 CEF 进程,而是直接交给 Windows,然后它会调用 Chrome 独立应用程序(如果它是您的 OS 默认浏览器)。如果您出于任何原因致力于“显示外部”范例,那么在此处测试各种浏览器类型组合可能(?)是有价值的。
如何在 USD 托管控件中打开弹出窗口 window?
Javascript代码:
<script>
function basicPopup(url) {
popupWindow = window.open(url,'popUpWindow','height=300,width=700,left=50,top=50,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no, status=yes')
}
</script>
<a href="https://www.google.com" onclick="basicPopup(this.href);return false">Open a popup window</a>
USD Window 导航规则
路由类型 - 弹出窗口,操作 - 显示在外部,目标 - 选项卡
托管类型:边缘Process/Chrome进程。
问题:在浏览器中启动上述 JS 片段时,它按预期工作(弹出窗口以给定尺寸打开,子 window 能够与父 window 和 Post 消息)而相同的代码与 USD 集成,弹出窗口在新选项卡中启动并且新打开 window 无法与父 window 通信(window.open ()returns空)
关于我遗漏了什么有什么想法吗?
有可能他们根本不允许弹出窗口,就像代码片段中的 SO 一样。
您可以在控制台中查看。
这是一个包含更多信息的版本 - 请注意,由于沙盒,此版本不会在 SO 处弹出任何内容
注意 如果内容来自不同 起源
document.getElementById("popupDiv").addEventListener("click", function(e) {
const tgt = e.target.closest("a");
if (tgt && tgt.classList.contains("popup")) {
const popupWindow = window.open(tgt.href, tgt.target, 'height=300,width=700,left=50,top=50,resizable,scrollbars,toolbar,status');
if (popupWindow) {
console.log("Popup allowed");
e.preventDefault(); // cancel the actual link
} else console.log("Not allowed to pop, target used instead")
}
})
<div id="popupDiv">
<a href="https://www.google.com" target="popopWindow" class="popup">Open a popup window</a>
</div>
如果您让 USD 托管您的所有浏览器进程并统一您的浏览器类型,您也许可以根据需要访问您的父级 windows。
创建一个可以接收目标导航的“目标”/“子”托管控件。使所有浏览器 Chrome,如果您出于某种原因不能这样做,希望您可以将它们全部改为 Edge。在您的 Window 导航规则中,使用操作路由 Window 而不是显示外部,并将目标选项卡设置为新的子浏览器托管控件。如果您不想将子浏览器作为 MainPanel 选项卡托管,请将其放在 FloatingPanel 上。
此外,并非多余,但注意到上面的“Chrome/Edge”混合托管摘要后,我建议尽可能多地消除在整个配置中托管多种浏览器类型.我假设 USD 托管的浏览器移交给“Windows 托管”浏览器可能会使(阻止?)您找到父 window 的能力复杂化,即使浏览器类型在 USD 内部和外部是相同的。据我所知,USD 和 Windows 使用不同版本的 Edge(USD 尚未集成新的 Edge,而且可能永远不会)并且 USD 管理自己的 Chromium 实例。我假设 Chrome 中的“Show Outside”不会从您的 USD 应用程序文件夹启动新的 CEF 进程,而是直接交给 Windows,然后它会调用 Chrome 独立应用程序(如果它是您的 OS 默认浏览器)。如果您出于任何原因致力于“显示外部”范例,那么在此处测试各种浏览器类型组合可能(?)是有价值的。