【问题标题】:How to make sure a function returns true in Javascript?如何确保函数在 Javascript 中返回 true?
【发布时间】:2017-04-26 17:27:39
【问题描述】:

我一直在使用名为 AddPipe 的可嵌入 VideoRecorder。 https://addpipe.com/docs#javascript-control-api。在过去的几个月里,我一直在使用下面的函数来自动启动记录器,一旦它加载:

function onRecorderReady(recorderId) {

    document.VideoRecorder.record();

}

此功能随机停止工作。在文档中,它说要确保在使用 record() 方法之前嵌入返回 onCamAccess() 和 onFlashReady()。我试图更改我的代码以反映这一点,但我收到一个错误:

[Error] TypeError: undefined is not an object (evaluating 'document.VideoRecorder.record')
Global Code (Example:78)

我收到此错误时使用的代码:

<script>

function onCamAccess(allowed, recorderId) {

    return true;    

}



function onFlashReady(recorderId) {

     return true;

}

if (onCamAccess()) {

    if (onFlashReady()) {

       document.VideoRecorder.record();   

    }


}

</script>

【问题讨论】:

  • 嗨,也许您可​​以推迟调用,直到 VideoRecorder 对象准备好。如果脚本的加载有问题,只需对它进行空检查,直到它准备好。

标签: javascript controls undefined video-capture


【解决方案1】:

我找到的解决方案是在 .record() 方法上设置超时功能。

function onRecorderReady(recorderId) {

setTimeout(function() {document.VideoRecorder.record();}, 1000)

}

【讨论】:

    【解决方案2】:

    我在文档中找到了这个:

    onFlashReady(recorderId);
    此函数已弃用

    也许你可以试试下面的代码:

    function onCamAccess(allowed, recorderId) {
      document.VideoRecorder.record();
    }
    

    编辑:你能试试这个吗?

    (function () {
      function onRecorderReady(recorderId) {
        document.VideoRecorder.record();
      }
    })();
    

    【讨论】:

    • 我试过了,我刚刚找到的解决方法是设置一个1秒的超时功能,这很奇怪,因为之前不需要。
    • @ChaceMcguyer:我修改了我的答案。告诉我它是否适合你...... :)
    • 不,它仍然不起作用。问题是 onRecorderReady 不一定保证onCamAccess() 被记录器调用并返回true。在onRecorderReady() 事件发生后约 500 毫秒给予摄像头访问权限。所以我不得不延迟.record() 方法来解决这个问题。你想在这里做什么?
    • 将代码封装在 IIFE 中可以解决 JavaScript 中的很多问题。我认为在您的情况下这将是一个可行的选择,尤其是等待 DOM(document 必须准备好)。 :)
    • 我从来没有听说过 IIFE 我必须做一些研究,我是 Javascript 的新手。 :)
    猜你喜欢
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 2017-02-28
    相关资源
    最近更新 更多