iframe - 如何在 Xpages 中检测 iFrame

标签 iframe xpages

我正在尝试根据 xpage 是否加载到 iFrame 中来渲染面板。

我的代码看起来像这样

<xp:panel
    rendered="#{javascript:return window.self != window.top;}">
</xp:panel>

但是我收到一个错误。

Script interpreter error, line=1, col=20: [ReferenceError] 'window' not found
-> 1: return window.self !== window.top;

我走在正确的轨道上还是有其他方法可以做到这一点。

最佳答案

面板中的 rendered= 代码在服务器端执行,因此窗口不可用。

在客户端执行代码,如果页面未在 iFrame 中加载,则隐藏元素。

<xp:eventHandler
    event="onClientLoad"
    submit="false">
    <xp:this.script><![CDATA[
          if (window == window.top) {
              document.getElementById("#{id:panel1}").style.display = 'none';
          }]]></xp:this.script>
</xp:eventHandler>
<xp:panel id="panel1">
    <xp:text
        id="computedField1"
        value="#{javascript:'test'}">
    </xp:text>
</xp:panel>

如果您不想渲染并稍后隐藏仅 iFrame 部分,您可以使用其他方法:

  • 首先渲染没有仅包含 iFrame 部分的页面
  • 如果客户端识别出该页面是在 iFrame 中加载的
    • 使用 URL 参数对仅限 iFrame 的面板执行部分刷新 iFrame=yes
    • 记住仅 iFrame 面板应在服务器端的 viewScope 变量中呈现

这是此方法的 XPage 工作示例

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:eventHandler
        event="onClientLoad"
        submit="false">
        <xp:this.script><![CDATA[
            if (window != window.top) {
                XSP.partialRefreshGet("#{id:panel1}", {
                    params: { 
                        'iFrame': 'yes'
                    }
                });
            }]]></xp:this.script>
    </xp:eventHandler>
    <xp:panel
        id="panel1">
        <xp:panel
            id="panel2"
            rendered="#{javascript: 
              if (param.iFrame) {viewScope.iFrame = param.iFrame}; viewScope.iFrame}">
            <xp:text
                id="computedField1"
                value="#{javascript:'test'}">
            </xp:text>
        </xp:panel>
    </xp:panel>
</xp:view>

关于iframe - 如何在 Xpages 中检测 iFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27190473/

相关文章:

javascript - csjs onclick事件刷新我的xpage

JQuery 在 Iframe 中查找元素(通过其文本)并向其添加 .click 函数

css - 在 Bootstrap 中将大小设置为响应式 iframe

iframe - Vimeo iFrame 仅偶尔加载

javascript - 通过模式复选框选择将一个文档添加到另一个文档

javascript - 操作不适用于自定义控件上的呈现属性集,包含操作按钮

javascript - 当用户使用 Dojo 滚动到底部时加载新内容?

javascript - 没有包装器的 iframe 维基百科文章

javascript - 使网页内容适合固定大小的 iframe

css - 为 IBM Connections 使用修改后的 XPages 主题?