使用javascript

时间:2017-07-17 18:15:42

标签: javascript vb.net youtube geckofx

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

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

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

创建geckoBrowser后,我使用
实体化了播放器  geckoBrowser.LoadHtml("<html></html>",Nothing)
似乎有两种方法可以构建您的HTML,这两种方法对我都不起作用:

  1. 使用jsapi:
  2. 嵌入视频

    &#13;
    &#13;
        <!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>
    &#13;
    &#13;
    &#13;

    1. 使用iframe嵌入视频:
    2. &#13;
      &#13;
      <!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>
      &#13;
      &#13;
      &#13;

      无论哪种方式成功加载并启动视频 虽然用

      调用播放器上的js-function
      Using jscontext As New AutoJSContext(geckoBrowser.Window)  
          jscontext.EvaluateScript("player.pauseVideo()")  
      End Using  
      

      它始终以System.AccessViolationException结尾。

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

1 个答案:

答案 0 :(得分: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起源是这里的问题。虽然我无法弄明白。

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