dify icon indicating copy to clipboard operation
dify copied to clipboard

用Iframe嵌入到html页面中的web应用无法显示标题栏(包括重置对话按钮)

Open futureflare opened this issue 1 year ago • 3 comments

Self Checks

  • [X] This is only for bug report, if you would like to ask a quesion, please head to Discussions.
  • [X] I have searched for existing issues search for existing issues, including closed ones.
  • [ ] I confirm that I am using English to submit this report (我已阅读并同意 Language Policy).
  • [X] Pleas do not modify this template :) and fill in all the required fields.

Dify version

0.6.5

Cloud or Self Hosted

Self Hosted (Docker)

Steps to reproduce

我将web应用嵌入到html页面中,不能显示标题栏,而F12以后,却可以看到蓝色的标题栏目。缺少标题栏,用户无法重置对话。 dify发布的web应用无法正常显示标题栏 放到html页面中的web应用不能显示标题栏

✔️ Expected Behavior

正常应该显示标题栏目,或者是可以提供一个会话重置的按钮连接。

❌ Actual Behavior

web应用中,无法显示标题栏。 放到html页面中的web应用不能显示标题栏

futureflare avatar May 02 '24 09:05 futureflare

你好,@futureflare!我是Dosu,一个可以帮助你解决问题、回答问题并成为贡献者的机器人。我在这里帮助你,同时等待人类维护者的回复。我会立刻开始查看你的问题,并尽快给你一个完整的答复。

dosubot[bot] avatar May 02 '24 09:05 dosubot[bot]

Hi @futureflare You should adhere to "I confirm that I am using English to submit this report (我已阅读并同意 https://github.com/langgenius/dify/issues/1542)." So everyone can understand this.

你好, @futureflare ,你应该坚持 https://github.com/langgenius/dify/issues/1542 这样每个人都能理解

That behavior is expected, the header will only show if the window width is less than 640px, if is more is going to return null. So I'm guessing that you are using the first way to embed the frame:

这种行为是预期的,标题栏只会在窗口宽度小于640像素时显示,如果宽度大于640像素,则会返回null。所以我猜你正在使用第一种方式嵌入框架。

image

dromerolovo avatar May 02 '24 12:05 dromerolovo

To address the issue of the title bar not displaying in your web application embedded via an iframe, and to implement a conversation reset functionality, you'll need to consider a couple of technical strategies.

  1. Visibility of the Title Bar: The behavior you're experiencing, where the title bar only appears under certain conditions (like when inspecting with F12), suggests that there might be CSS or JavaScript conditions affecting its visibility. Since the title bar's visibility is expected to change based on the window width (appearing only when the window width is less than 640px), ensure your embedding setup doesn't inadvertently keep the iframe's width above this threshold, thus hiding the title bar. If necessary, adjust the CSS or JavaScript logic that controls the iframe or the embedded application to ensure the title bar is visible when needed.

  2. Conversation Reset Functionality: To enable a conversation reset button or functionality from outside the iframe (in the parent document), you can use the postMessage API for cross-document communication. Here's a brief overview of how you might implement this:

    • Inside the iframe (Dify application): Add an event listener that listens for a specific message, such as 'RESET_CONVERSATION'. Upon receiving this message, trigger the logic to reset the conversation. This involves updating the application's state to reflect a new or reset conversation.
    window.addEventListener('message', (event) => {
      if (event.origin !== "EXPECTED_ORIGIN") return; // Replace EXPECTED_ORIGIN with your domain
    
      if (event.data.type === 'RESET_CONVERSATION') {
        // Logic to reset the conversation
      }
    });
    
    • In the parent document: Send a message to the iframe to initiate the reset. This can be triggered by a button click or another event in the parent document.
    const iframe = document.getElementById('difyIframe'); // Ensure the iframe has an ID
    iframe.contentWindow.postMessage({ type: 'RESET_CONVERSATION' }, '*'); // Adjust target origin as needed
    

Ensure you replace "EXPECTED_ORIGIN" with the actual origin of your iframe content to secure the communication. Also, adjust the postMessage target origin from '*' to the specific origin of the iframe for enhanced security.

This approach allows you to maintain the functionality and appearance of your embedded application, ensuring users can see the title bar when necessary and reset conversations as needed.

Details

Sources


About Dosu This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.

Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

To continue the conversation, mention @dosu.

dosubot[bot] avatar May 02 '24 12:05 dosubot[bot]

Close due to #1542

crazywoola avatar May 02 '24 15:05 crazywoola

这个问题导致中文结果无法继续处理。

@.***

发件人: Diego Romero-Lovo 发送时间: 2024-05-02 20:40 收件人: langgenius/dify 抄送: futureflare; Mention 主题: Re: [langgenius/dify] 用Iframe嵌入到html页面中的web应用无法显示标题栏(包括重置对话按钮) (Issue #4054) Hi @futureflare You should adhere to "I confirm that I am using English to submit this report (我已阅读并同意 #1542)." So everyone can understand this. That behavior is expected, the header will only show if the window width is less than 640px, if is more is going to return null. So I'm guessing that you are using the first way to embed the frame: 这种行为是预期的,标题栏只会在窗口宽度小于640像素时显示,如果宽度大于640像素,则会返回null。所以我猜你正在使用第一种方式嵌入框架。 image.png (view on web) — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

futureflare avatar May 25 '24 15:05 futureflare