使用 javascript 在 vb.net 中使用 geckofx 嵌入 youtube 视频
Embedding youtube videos with geckofx in vb.net using javascript
我正在尝试使用 geckofx 在我的 vb.net 应用程序中嵌入一个 youtube 和 twitch 播放器(一次只有一个)。
虽然它与 twitch 播放器完美配合,但我无法以相同的方式与 youtube 播放器交互 - 使用 javascript 调用。
我正在使用这些文档:
- GeckoFX-45.0 source tests
- YouTube 播放器 API iframe 嵌入参考
- Twitch 嵌入视频和剪辑
(对不起,我还不能 link 所有这些)
我已经通过 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 函数时
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 起源是这里的问题。虽然我无法弄清楚。
也许这会对其他人有所帮助。
我正在尝试使用 geckofx 在我的 vb.net 应用程序中嵌入一个 youtube 和 twitch 播放器(一次只有一个)。 虽然它与 twitch 播放器完美配合,但我无法以相同的方式与 youtube 播放器交互 - 使用 javascript 调用。
我正在使用这些文档:
- GeckoFX-45.0 source tests
- YouTube 播放器 API iframe 嵌入参考
- Twitch 嵌入视频和剪辑
(对不起,我还不能 link 所有这些)
我已经通过 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>
两种方式都成功加载并启动视频。
虽然在
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 起源是这里的问题。虽然我无法弄清楚。
也许这会对其他人有所帮助。