非常简单。是否可以静音或控制 JavaFX WebView 的音量?我用谷歌搜索了一段时间,但我找不到任何提及这一点。我查看了 WebView
和 WebEngine
的代码,似乎没有关于控制音量的任何内容。
我仍然需要同一个应用程序中的其他 MediaPlayer
来工作并产生声音,所以我不能将整个应用程序静音。
最佳答案
目前,WebView 或 WebEngine 控件中没有这样的声音系统 API。
但您可以注入(inject) JavaScript 来静音/取消静音和控制声音。此方法仅适用于 HTML5 元素 < video > 或 < audio >,因为像 Flash 或 JS 这样的项目初始化的音频通常是不可能限制的。我已经为你创建了示例程序:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
WebView myWebView = new WebView();
WebEngine engine = myWebView.getEngine();
//dirty code xD
Button btn = new Button("Load Youtube");
btn.setOnAction((ActionEvent event) -> engine.load("http://www.youtube.com/embed/A6hrw6KGdtM?autoplay=1"));
Button btn2 = new Button("Mute");
btn2.setOnAction((ActionEvent event) -> engine.executeScript(getJSAudioVideo(true)));
Button btn3 = new Button("Unmute");
btn3.setOnAction((ActionEvent event) -> engine.executeScript(getJSAudioVideo(false)));
Button btn4 = new Button("+");
btn4.setOnAction((ActionEvent event) -> engine.executeScript(getJSSoundVolume(0.9)));
Button btn5 = new Button("-");
btn5.setOnAction((ActionEvent event) -> engine.executeScript(getJSSoundVolume(0.1)));
VBox root = new VBox();
root.getChildren().addAll(myWebView, btn, btn2, btn3, btn4, btn5);
Scene scene = new Scene(root, 800, 500);
primaryStage.setScene(scene);
primaryStage.setTitle("Mute a WebView in JavaFX, is it possible?");
primaryStage.show();
}
/**
* @param mute
* @return JS code for mute/unmute
*/
public String getJSAudioVideo(boolean mute){
return "var videos = document.querySelectorAll('video'),\n" +
" audios = document.querySelectorAll('listen');\n" +
" [].forEach.call(videos, function(video) { video.muted = "+String.valueOf(mute)+"; });\n" +
" [].forEach.call(audios, function(audio) { audio.muted = "+String.valueOf(mute)+"; });";
}
/**
* @param volume
* @return JS code for setting volume sound
*/
public String getJSSoundVolume(double volume){
//max 1.0, min 0.0 Default: 1.0
double _volume = (volume > 1.0 || volume < 0.0) ? 1.0 : volume;
return "var videos = document.querySelectorAll('video'),\n" +
" audios = document.querySelectorAll('listen');\n" +
" [].forEach.call(videos, function(video) { video.volume = "+String.valueOf(_volume)+"; });\n" +
" [].forEach.call(audios, function(audio) { audio.volume = "+String.valueOf(_volume)+"; });";
}
public static void main(String[] args) {
launch(args);
}
}
关于java - 在JavaFX中静音一个WebView,有可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49261248/