gpt4 book ai didi

javascript - 使用 javascript 在 vb.net 中嵌入带有 geckofx 的 youtube 视频

转载 作者:行者123 更新时间:2023-12-03 06:15:01 24 4
gpt4 key购买 nike

我正在尝试使用 geckofx 在我的 vb.net 应用程序中嵌入一个 youtube 和 twitch 播放器(一次只有一个)。
虽然它与 twitch 播放器完美配合,但我无法以同样的方式与 youtube 播放器交互 - 使用 javascript 调用。

我正在使用这些文档:
- GeckoFX-45.0 source tests
- 用于 iframe 嵌入的 YouTube 播放器 API 引用
- Twitch 嵌入视频和剪辑
(对不起,我还不允许链接所有这些)

我已经通过 nuget 安装了“geckofx-45 windows 32bit”并初始化它,如图 here .
即使这是在 C# 中,它也可以很容易地移植到 VB。

创建壁虎浏览器后,我使用嵌入播放器
geckoBrowser.LoadHtml("<html></html>",Nothing) .
不过,似乎有两种方法可以构建您的 HTML,但这两种方法都不适合我:

  • 使用jsapi嵌入视频:


  •     <!DOCTYPE html>
    <html>
    <body>
    <!-- 1. The <iframe> (and video player) will replace this <div> tag. -->
    <div id="player"></div>

    <script>
    // 2. This code loads the IFrame Player API code asynchronously.
    var tag = document.createElement('script');

    tag.src = "https://www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    // 3. This function creates an <iframe> (and YouTube player)
    // after the API code downloads.
    var player;
    function onYouTubeIframeAPIReady() {
    player = new YT.Player('player', {
    height: '360',
    width: '640',
    videoId: 'mcixldqDIEQ',
    events: {
    'onReady': onPlayerReady
    }
    });
    }

    // 4. The API will call this function when the video player is ready.
    function onPlayerReady(event) {
    event.target.playVideo();
    }

    </script>
    </body>
    </html>


  • 使用 iframe 嵌入视频:


  • <!DOCTYPE html>
    <html>
    <body>
    <iframe id="player" type="text/html" width="640" height="390"
    src="http://www.youtube.com/embed/mcixldqDIEQ?enablejsapi=1"
    frameborder="0"></iframe>

    <script>
    var tag = document.createElement('script');
    tag.src = "https://www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
    var player;
    function onYouTubeIframeAPIReady() {
    player = new YT.Player('player', {
    events: {
    'onReady': onPlayerReady
    }
    });
    }

    function onPlayerReady(event) {
    event.target.playVideo();
    }
    </script>
    </body>
    </html>


    无论哪种方式都可以成功加载并启动视频。
    虽然在播放器上调用 js 函数时
    Using jscontext As New AutoJSContext(geckoBrowser.Window)  
    jscontext.EvaluateScript("player.pauseVideo()")
    End Using

    它总是以 System.AccessViolationException 结尾.

    有谁知道为什么我无法访问播放器?
    或者是否有另一种(可能更简单的方法)将这些播放器嵌入到 vb.net 中?

    最佳答案

    我找到了访问播放器的解决方法。我用这个“注入(inject)”我的命令给玩家:

    <script>
    var result;
    function runCode(code){
    var JS= document.createElement('script');
    JS.text= "result = " + code;
    document.body.appendChild(JS);
    return result;
    }
    </script>


    然后我在我的应用程序中调用它:
    Dim result As String = Nothing
    Using jscontext As New AutoJSContext(geckoBrowser.Window)
    jscontext.EvaluateScript("addCode('player.getVolume();')", result)
    End Using
    MsgBox(result)

    调用是双向的,因此您也可以获得返回值。

    这种方法并不完美,但它确实有效。我怀疑javascript起源是这里的问题。虽然我无法弄清楚。

    也许这会帮助其他人。

    关于javascript - 使用 javascript 在 vb.net 中嵌入带有 geckofx 的 youtube 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45151003/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com