首页 文章

使用javascript在vb.net中使用geckofx嵌入youtube视频

提问于
浏览
0

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

我正在使用这些文件:

  • GeckoFX-45.0 source tests
  • iframe嵌入的YouTube播放器API参考
  • Twitch嵌入视频和剪辑
    (sry,我还不允许链接所有这些)

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

创建geckoBrowser后,我使用嵌入播放器
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-function时

Using jscontext As New AutoJSContext(geckoBrowser.Window)  
    jscontext.EvaluateScript("player.pauseVideo()")  
End Using

它始终以 System.AccessViolationException 结尾 .

有谁知道为什么我无法访问播放器?
或者是否有其他(更容易的方法)将这些玩家嵌入vb.net?

1 回答

  • 0

    我找到了一种解决方法来访问播放器 . 我用这个'向玩家注入'我的命令:

    <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起源是这里的问题 . 虽然我无法弄明白 .

    也许这会对别人有所帮助 .

相关问题