0

我有一个正在使用 websdk 的聊天机器人,并且图像是通过 Oracle 的一个工具添加的,该工具不接受图像属性,您只需将图像 URL 放在正确的字段中。然而,图像被调整为微小的聊天机器人 iframe,我想知道如何在点击或悬停时放大它们。在工具之外,我可以应用 Javascript 和 CSS,但我无法编辑 HTML,因为它是由工具呈现的。这是该工具的外观,看看它如何不使用 HTML,您只需输入链接? 甲骨文工具

我使用悬停 CSS 和那个词来放大图像,但图像仍然卡在 iframe 大小内,所以它不是一个真正的解决方案。

.oda-chat-card-image:hover {
  -ms-transform: scale(1.5); /* IE 9 */
  -webkit-transform: scale(2); /* Safari 3-8 */
  transform: scale(2);

悬停示例

我发现了一些将图像放入目标 div 的代码,该目标 div 是整个背景 iframe。我使用这个 iframe 在机器人建议的聊天位的背景中打开链接,以便使用的人保持在同一个窗口中。我喜欢,但它要求图像具有我无法添加的内联属性。

我想如果我可以使用一些 Javascript 将属性添加到所有图像中,我可以获得我想要的,但这似乎需要为图像添加唯一 ID,但这是我无法做到的。我想知道其他人可以提出哪些其他可能性。

这些图像确实有一个类,所以也许我可以以某种方式访问​​它们。这就是我能够应用悬停 CSS class=oda-chat-c​​ard-image 的方式

这是我尝试在我命名为 name="mainPageIframe" id="mainPageIframe" 的背景 iframe 中单击打开图像时使用的代码

const change = src => { 
    document.getElementById('mainPageIframe').src = src 

如果我在浏览器中检查图像并手动添加

onclick="change(this.src)" 

到图像的末尾,

由聊天机器人工具呈现的示例代码,但在我在 f12 检查图像时手动添加了 onclick 属性的位置进行了编辑。

<img dir="auto" class="oda-chat-card-image" src="https://eservice.xactware.com/esc/showme/images/Annotated/1379/Bot/X1ForgotPassword.png" onclick="change(this.src)" alt="Card image">

手动添加属性以产生我想要的结果的示例, 然后当我单击它在背景 iframe 中打开的图像时。这样做是我能想到的最好的事情,但我宁愿将图像打开为整个屏幕上的放大叠加层,而不是困在 iframe 内。这就是为什么我认为将其复制到主页 iframe 将是一个解决方案。关于如何申请的任何想法

onclick="change(this.src)" 

对我网页中没有唯一 ID 的所有图像,或者可能一起应用不同的解决方案?

这是我正在处理的可以编辑的 HTML 文件。它通过 URI 和 channelID 调用机器人内容。我能够将 CSS 应用于机器人和 Javascript 中的项目,我只是不知道如何让 bnot 中的图像弹出或超出聊天机器人 iframe 的一侧并放大。

 <!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
        <title>ODA Live Chat Example</title>
    
    </head>
    <body>
        <iframe name="mainPageIframe" id="mainPageIframe" src="https://docs.oracle.com/en/cloud/paas/digital-assistant/index.html" style="position:fixed; top:0; left:0; bottom:0; right:0; width:100%; height:100%; border:none; margin:0; padding:0; overflow:hidden; z-index:0;">
            Your browser doesn't support iframes
        </iframe>
        <script src="https://polyfill.io/v3/polyfill.js?features=Number.isInteger%2Cdefault"></script>

<style>
        
        
.oda-chat-card-image:hover {
  -ms-transform: scale(1.5); /* IE 9 */
  -webkit-transform: scale(2); /* Safari 3-8 */
  transform: scale(2);


  
}       
.more
{
    display: none;
}
img {
    max-width: 100%;
    height: auto;
}

.oda-chat-conversation {
    background-color: #b3b8bd;
}
 
.oda-chat-left .oda-chat-message-bubble, .oda-chat-left .oda-chat-message-header, .oda-chat-left .oda-chat-message-footer, .oda-chat-card, .oda-chat-message-global-actions .oda-chat-action-postback {
    background-color: #2e5a81;

}

.oda-chat-message-actions {
    background-color: #1f3b54;
}

.oda-chat-message-global-actions .oda-chat-action-postback, .oda-chat-message-actions .oda-chat-action-postback {
    background-color: #1f3b54;
    margin: 0px;
    font-weight: normal;
}

.oda-chat-action-postback {
    background-color: #1f3b54;
}

.oda-chat-header {
    background-color: #1f3b54;
}
.oda-chat-footer {
    background-color: #1f3b54;
}
.oda-chat-card-image {
    max-width: 100%;
    height: auto;
}


.oda-chat-button {
    height: 20px;
    width: 100px;
    outline: none;
    background-color: transparent;
    box-shadow: none;
}

@media screen and (min-width: 769px){
  .oda-chat-button {
      height: 96px;
      width: 96px;
  }

        </style>
        
        <script>

const change = src => { 
    document.getElementById('mainPageIframe').src = src 
}


        
            //Function to toggle full pargraph showing
            function showHideParagraphs(lidx) {
                var dots = document.getElementById("dots"+lidx);
                var moreText = document.getElementById("more"+lidx);
                var btnText = document.getElementById("myBtn"+lidx);
                btnText.blur(); //loose focus

                if (dots.style.display === "none") {
                    dots.style.display = "inline";
                    btnText.innerHTML = "Read more";
                    moreText.style.display = "none";
                } else {
                    dots.style.display = "none";
                    btnText.innerHTML = "Show less";
                    moreText.style.display = "inline";
                }
            }

            //Function to split paragraphs with show more:
            var gidx = 0;
            function splitParagraph(txt) {
                var paragraphs = txt.split("\n\n");
                if (paragraphs.length > 1) {
                    var html = "<p>"+paragraphs[0]+'<span id="dots'+gidx+'">...</span></p><span id="more'+gidx+'" class="more">';
                    for (var idx = 1; idx < paragraphs.length; idx++) {
                        html += "<p>"+paragraphs[idx]+"</p>";
                    }
                    html += '</span><div class="oda-chat-message-actions"><button class="oda-chat-action-postback" onclick="showHideParagraphs('+gidx+')" id="myBtn'+gidx+'">Read more</button></div>';
                    gidx++;
                    return html;
                }
                else {
                    return txt;
                }
            }

            //For typing indicator for keepTurn messages
            var moreToCome = 0;
            var typingIndicatorSafeguard=null;
            function increaseMoreToCome(n){
                moreToCome += n;
                if (typingIndicatorSafeguard!=null){
                    clearTimeout(typingIndicatorSafeguard);
                }
                typingIndicatorSafeguard = setTimeout(function(){moreToCome=0;}, 30000); //In any case only keep generating typing indicators for 30 seconds
            }
            function decreaseMoreToCome(){
                if (moreToCome>0){
                    moreToCome--;
                    setTimeout(function() {Bots.showTypingIndicator(30);}, 0);
                }
            }
            //End of for typing indicator for keepTurn messages



            var delegate = {
                beforeDisplay: function(message) {
                    if (message.messagePayload.type=='text'){
                      //Split paragrahps with show-more
                      message.messagePayload.text = splitParagraph(message.messagePayload.text);
                    }

                    //Typing indicator for keepTurn messages
                    //Solution pending: https://bug.oraclecorp.com/pls/bug/webbug_edit.edit_info_top?rptno=30944113
                    if (message.messagePayload.text && message.messagePayload.text.match((/^((Greetings)|(Salutations)).*I am Artie/))){
                        increaseMoreToCome(2);
                    }

                    decreaseMoreToCome();
                    //End of typing indicator for keepTurn messages

                    return message;
                },
                beforeSend: function(message) {
                    //For typing indicator for keepTurn messages
                    moreToCome=0;
                    //End of for typing indicator for keepTurn messages
                    return message;
                }
            };

            var chatWidgetWebSettings = {
                URI: 'oda-12e973c924a245abbd61f357fbbe926a-da2.data.digitalassistant.oci.oraclecloud.com',
                channelId: 'a61c229b-5469-4ea0-b62c-686bc3c1ad76',
                enableClearMessage: true,
                enableLocalConversationHistory: true,
                enableTimestamp: true,
                enableAttachment: false,
                showTypingIndicator: true,              
                enableSpeech: true,
                enableBotAudioResponse: true,
                //openLinksInNewWindow: true, //Disabled as it's not really needed and is superseeding link onclick handler added through delegate.
                enableAutocomplete: true,
                disablePastActions: 'none',
                delegate: delegate,
                botButtonIcon: 'images/RbotIcon.png',
                botIcon: 'images/RbotIcon.png',
                logoIcon: 'images/RbotIcon.png',
                personIcon: 'images/personIcon.png',
                agentAvatar: 'images/woman2.png',
                i18n: { "en": { chatTitle: 'Oracle Digital Assistant',
                          chatSubtitle: "Help on digital assistant learning"
                        }
                },
                typingIndicatorTimeout: 30,
                messagePadding: '10px',
                //theme: WebSDK.THEME.redwood-dark,
                theme: 'redwood-dark',
                linkHandler: { target: 'mainPageIframe' },
                enableDraggableButton: true
                
            };

            function initSdk(name) {
                // Default name is Bots
                if (!name) {
                    name = 'Bots';
                }
                setTimeout(function (){
                    const Bots = new WebSDK(chatWidgetWebSettings); // Initiate library with configuration
                    Bots.on('widget:opened', function() {
                      console.log('Widget opened!');
                      if (Bots.getConversationHistory().messagesCount < 1){
                        console.log("Starting the conversation");
                        Bots.sendMessage('Hello', { hidden: true });
                      }

                    });
                    Bots.connect()                                  // Connect to server
                        .then(function (){
                            console.log("Connection Successful");
                        })
                        .catch(function (reason){
                            console.log("Connection failed");
                            console.log(reason);
                        });
                    window[name] = Bots;
                });
            }
        
        </script>

        <script src="files/web-sdk_21.02.js"  onload="initSdk()"></script>


        
    </body>
</html>
4

0 回答 0