未捕获的错误:getSessionData 需要两个非 null 参数 JavaScript

Uncaught Error: getSessionData requires two non-null arguments JavaScript

提问人:R15 提问时间:3/14/2022 最后编辑:R15 更新时间:3/23/2022 访问量:341

问:

我正在设备中加载文件。加载文件时,我没有获取内容,它只是显示为空,并且在日志中出现错误JavaScriptWebviewandroidwebview

[chromium] [INFO:CONSOLE(2)] "Uncaught Error: getSessionData requires two non-null arguments (domain, keys).", source: https://service.force.com/embeddedservice/5.0/frame/session.esw.min.js (2)
[chromium] [INFO:CONSOLE(5)] "No domain set!", source: https://service.force.com/embeddedservice/5.0/eswFrame.min.js (5)
The thread 0x1d has exited with code 0 (0x0).
Thread finished: <Thread Pool> #29
Thread finished: <Thread Pool> #7
The thread 0x7 has exited with code 0 (0x0).
Thread finished: <Thread Pool> #31
The thread 0x1f has exited with code 0 (0x0).
[Choreographer] Skipped 1299 frames!  The application may be doing too much work on its main thread.
[chromium] [INFO:CONSOLE(1)] "Uncaught ReferenceError: initESW is not defined", source: https://service.force.com/embeddedservice/5.0/esw.html (1)

ULR 在上面的错误中,不是正在重新访问的确切 URL,下面是正确的 ULR

https://service.force.com/embeddedservice/5.0/esw.min.js

我正在使用的以下文件

<html>
<body>
<button onclick="Chat1()">Submit</button>
<script type='text/javascript' src='https://service.force.com/embeddedservice/5.0/esw.min.js'></script>
<script type='text/javascript'>
    function Chat1() {
        var initESW = function (gslbBaseURL) {
        embedded_svc.settings.displayHelpButton = true; //Or false
        embedded_svc.settings.language = ''; //For example, enter 'en' or 'en-US'
        embedded_svc.settings.enabledFeatures = ['LiveAgent'];
        embedded_svc.settings.entryFeature = 'LiveAgent';
        embedded_svc.init(
            'https://ulr.my.salesforce.com',
            'https://ulr.force.com/visualforce',
            gslbBaseURL,
            '00D7a00000055uj',
            'Products',
            {
                'baseLiveAgentContentURL': 'https://c.la3-c1cs-cdg.salesforceliveagent.com/content',
                'deploymentId': '720008Oqg',
                'buttonId': '5730PID',
                'baseLiveAgentURL': 'https://d.la3-c1cs-cdg.salesforceliveagent.com/chat',
                'eswLiveAgentDevName': 'EmbeddedServiceLiveAgent_Parent0000000jLUAQ_17d9a605e8e',
                'isOfflineSupportEnabled': false
            }
        );
    };
    if (!window.embedded_svc) {
        var s = document.createElement('script');
        var jsUlr1 = 'https://ulr.salesforce.com/embeddedservice/5.0/esw.min.js/'
        console.log("Control here2")
        s.src = jsUlr1;
        s.onload = function () {
            initESW(null);
        }
        document.body.appendChild(s);
    }
    else {
        initESW('https://service.force.com');
    }
    }
</script>
</body>
</html>

你可以从这里获得更多关于我正在做什么的信息。在此链接中,ulr 未被使用,使用本地文件。

我想知道如何解决?这真是令人痛苦的错误😨。getSessionData requires two non-null arguments

我们可以在这个网址上看到这个错误

https://service.force.com/embeddedservice/5.0/frame/session.esw.min.js
JavaScript WebView Salesforce Chromium

评论


答:

2赞 Jean-Baptiste Martin 3/19/2022 #1

Salesforce 会尝试解析您的 Web 视图的 URL,以便提取域。
然后,将域传递给多个函数调用,包括 getSessionData。
您可以打开未缩小的 https://service.force.com/embeddedservice/5.0/eswFrame.js 文件并注意到以下块:

window.location.search.replace(/([a-zA-Z0-9]+)=([\S]+)/g, function(match, key, value) {
  if(key === "parent") {
    // Only take the parts between the first instance of // and the / following it.
    this.parentOrigin = value;
  }
}.bind(this));

此函数无法从加载的本地文件中解析域,这是加载 webview 时执行的操作。因此错误。file:///

解决方案是在您的应用程序中托管本地服务器或将 webview 脚本存储在远程服务器上,以便 Salesforce 可以从 webview url 正确解析域。

例如,使用 URL 加载以下脚本后,聊天代理会在 Chrome 桌面上正确显示:http://localhost

<html>
<body>
<script type='text/javascript' src='https://service.force.com/embeddedservice/5.0/esw.min.js'></script>
<script type='text/javascript'>
    var initESW = function (gslbBaseURL) {
        embedded_svc.settings.displayHelpButton = true; //Or false
        embedded_svc.settings.language = 'en'; //For example, enter 'en' or 'en-US'
        embedded_svc.settings.enabledFeatures = ['LiveAgent'];
        embedded_svc.settings.entryFeature = 'LiveAgent';
        embedded_svc.init(
            'https://ulr.my.salesforce.com',
            'https://ulr.force.com/visualforce',
            gslbBaseURL,
            '00D7a00000055uj',
            'Products',
            {
                'baseLiveAgentContentURL': 'https://c.la3-c1cs-cdg.salesforceliveagent.com/content',
                'deploymentId': '720008Oqg',
                'buttonId': '5730PID',
                'baseLiveAgentURL': 'https://d.la3-c1cs-cdg.salesforceliveagent.com/chat',
                'eswLiveAgentDevName': 'EmbeddedServiceLiveAgent_Parent0000000jLUAQ_17d9a605e8e',
                'isOfflineSupportEnabled': false
            }
        );
    }
    initESW('https://service.force.com');
</script>
</body>
</html>

评论

0赞 R15 3/23/2022
嗨,我试过了。我保留了我的html内容并得到了一个网址。现在我收到错误.我甚至在尝试此解决方案之前就为您分配了赏金,以免它:)闲置。请帮我解决这个问题?run.mocky.io[chromium] [INFO:CONSOLE(7)] "Message origin must match parent origin!", source: https://service.force.com/embeddedservice/5.0/eswFrame.min.js (7)
0赞 Jean-Baptiste Martin 3/23/2022
如果在常规桌面浏览器中使用此 URL,会发生什么情况?你有我可以检查的共享 URL 吗?
0赞 Jean-Baptiste Martin 3/23/2022
我已经用其他细节编辑了我的答案。
1赞 R15 3/23/2022
当我在 w3school 在线 html 编辑器中使用相同的文件时,我可以看到聊天按钮出现。不知道为什么移动应用程序会出现此错误。评论中的上述网址给了我这个错误。这是我正在使用的网址 run.mocky.io/v3/0093032c-1e40-4c0f-bba1-08241a4fed64
0赞 Jean-Baptiste Martin 3/23/2022
我刚刚在 Android Web 视图中加载了这个 URL,它工作正常:.它必须与您的 webview 配置有关。是否可以在 Web 视图上启用 DomStorageEnabled?Salesforce 需要本地存储。https://run.mocky.io/v3/b4625e05-9f46-4d93-b1c6-4f12066e931f
0赞 user16486258 3/21/2022 #2

getSessionData requires two non-null arguments,这意味着您的函数正在为它们或两者获得值。 为什么会得到,前面调用函数的函数之一有问题,或者您实际上是在参数中使用数据运行此函数。getSessionData(a,b)nullabnullgetSessionsData()null