使用 jxbrowser javafx 访问媒体
access to the media with jxbrowser javafx
嗨,对不起,我英语不好。
我实现了一个项目 javafx jxbrowser,我还是个新手,简而言之,在我的项目中,我在执行 javascript 脚本时遇到了问题,但没有 运行。我按照他们使用 jquery (https://jxbrowser.support.teamdev.com/support/solutions/articles/9000013725-working-with-jquery) 做的这个网站上的说明进行操作,但没有任何效果
我可能会说这是访问媒体的问题,因为我的 java 脚本代码允许从浏览器对象访问计算机的媒体。
该代码适用于 chrome 但不适用于 jxbrowser。
请查看我的代码,如果可能,请更正它以使其正常工作。
谢谢你
这是我的 java 外汇代码
有主文件、html 代码和脚本 javaScript(我没有放 .css 文件,因为它太长并且不会对代码造成任何问题,因为.html 文件在 chrome)
上运行良好
Main.java
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
Browser browser = new Browser();
BrowserView view = new BrowserView(browser);
StackPane pane = new StackPane();
pane.getChildren().add(view);
Scene scene = new Scene(pane,500,400);
primaryStage.setScene(scene);
primaryStage.show();
browser.addLoadListener(new LoadAdapter() {
@Override
public void onFinishLoadingFrame(FinishLoadingEvent event) {
if (event.isMainFrame()) {
event.getBrowser().executeJavaScript("$('button').hide();") }
}});
InputStream urlStream = getClass().getResourceAsStream("/html/index.html");
String html = null;
try (BufferedReader urlReader = new BufferedReader(new InputStreamReader (urlStream))) {
StringBuilder builder = new StringBuilder();
String row;
while ((row = urlReader.readLine()) != null) {
builder.append(row);
}
html = builder.toString();
} catch (IOException e) {
throw new RuntimeException(e);
}
browser.loadHTML(html);
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
index.html
<html>
<head>
<title> boilerplate </title>
<link rel="stylesheet" href="style.css"/>
<style>
body{
padding-top: 5rem;
}
</style>
</head>
<body>
<nav class="navbar navbar-fixed-top navbar-dark bg-inverse">
<a class = "navbar-brand" href="#"> Demo wertc </a>
</nav>
<div class = "container">
<div class = "row">
<div class="col-sm-6">
<h2>Reception</h2>
<video id="receiver-video" width="100%"height="400px"></video>
<p>
<button id="start">start the connection </button>
</p>
</div>
<div class="col-sm-6">
<h2>Envoi</h2>
<video id="emitter-video" width="100%"height="400px"></video>
</div>
</div>
<script src= "app.js"></script>
</body>
</html>
app.js
document.querySelector('#start').addEventListener('click',function(e){
navigator.getUserMedia({
video: true,
audio: true
},function (stream) {
let emitterVideo = document.querySelector('#emitter-video')
emitterVideo.src=window.URL.createObjectURL(stream)
emitterVideo.play()
}, function () {
})
})
您读取 index.html 文件的内容并使用 browser.loadHTML() 方法加载它。在这种情况下不会加载 .css 和 .js 文件,因为它们包含在相对路径中。您可以使用 browser.loadURL() 方法从文件系统加载 HTML 文件,例如:
browser.loadURL("file:///D:/media/html/index.html");
JxBrowser 基于 Chromium 引擎,不允许通过 JavaScript 从本地 HTML 文件访问系统媒体设备。为了允许从本地文件访问系统媒体设备,您需要使用以下 Chromium 开关禁用网络安全:
BrowserPreferences.setChromiumSwitches("--disable-web-security");
请注意,您必须在创建任何浏览器实例之前调用此方法。
您正在尝试使用 jQuery 功能,但是 jQuery 未包含在您的 HTML 文件中。您应该包含 jQuery 或通过纯 JavaScript.
实现您的逻辑
此外,我建议您查看 Remote Debugging Port 功能,它允许您使用 Chromium DevTools 调试加载的网页。
嗨,对不起,我英语不好。 我实现了一个项目 javafx jxbrowser,我还是个新手,简而言之,在我的项目中,我在执行 javascript 脚本时遇到了问题,但没有 运行。我按照他们使用 jquery (https://jxbrowser.support.teamdev.com/support/solutions/articles/9000013725-working-with-jquery) 做的这个网站上的说明进行操作,但没有任何效果 我可能会说这是访问媒体的问题,因为我的 java 脚本代码允许从浏览器对象访问计算机的媒体。 该代码适用于 chrome 但不适用于 jxbrowser。
请查看我的代码,如果可能,请更正它以使其正常工作。 谢谢你 这是我的 java 外汇代码 有主文件、html 代码和脚本 javaScript(我没有放 .css 文件,因为它太长并且不会对代码造成任何问题,因为.html 文件在 chrome)
上运行良好Main.java
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
Browser browser = new Browser();
BrowserView view = new BrowserView(browser);
StackPane pane = new StackPane();
pane.getChildren().add(view);
Scene scene = new Scene(pane,500,400);
primaryStage.setScene(scene);
primaryStage.show();
browser.addLoadListener(new LoadAdapter() {
@Override
public void onFinishLoadingFrame(FinishLoadingEvent event) {
if (event.isMainFrame()) {
event.getBrowser().executeJavaScript("$('button').hide();") }
}});
InputStream urlStream = getClass().getResourceAsStream("/html/index.html");
String html = null;
try (BufferedReader urlReader = new BufferedReader(new InputStreamReader (urlStream))) {
StringBuilder builder = new StringBuilder();
String row;
while ((row = urlReader.readLine()) != null) {
builder.append(row);
}
html = builder.toString();
} catch (IOException e) {
throw new RuntimeException(e);
}
browser.loadHTML(html);
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
index.html
<html>
<head>
<title> boilerplate </title>
<link rel="stylesheet" href="style.css"/>
<style>
body{
padding-top: 5rem;
}
</style>
</head>
<body>
<nav class="navbar navbar-fixed-top navbar-dark bg-inverse">
<a class = "navbar-brand" href="#"> Demo wertc </a>
</nav>
<div class = "container">
<div class = "row">
<div class="col-sm-6">
<h2>Reception</h2>
<video id="receiver-video" width="100%"height="400px"></video>
<p>
<button id="start">start the connection </button>
</p>
</div>
<div class="col-sm-6">
<h2>Envoi</h2>
<video id="emitter-video" width="100%"height="400px"></video>
</div>
</div>
<script src= "app.js"></script>
</body>
</html>
app.js
document.querySelector('#start').addEventListener('click',function(e){
navigator.getUserMedia({
video: true,
audio: true
},function (stream) {
let emitterVideo = document.querySelector('#emitter-video')
emitterVideo.src=window.URL.createObjectURL(stream)
emitterVideo.play()
}, function () {
})
})
您读取 index.html 文件的内容并使用 browser.loadHTML() 方法加载它。在这种情况下不会加载 .css 和 .js 文件,因为它们包含在相对路径中。您可以使用 browser.loadURL() 方法从文件系统加载 HTML 文件,例如:
browser.loadURL("file:///D:/media/html/index.html");
JxBrowser 基于 Chromium 引擎,不允许通过 JavaScript 从本地 HTML 文件访问系统媒体设备。为了允许从本地文件访问系统媒体设备,您需要使用以下 Chromium 开关禁用网络安全:
BrowserPreferences.setChromiumSwitches("--disable-web-security");
请注意,您必须在创建任何浏览器实例之前调用此方法。
您正在尝试使用 jQuery 功能,但是 jQuery 未包含在您的 HTML 文件中。您应该包含 jQuery 或通过纯 JavaScript.
实现您的逻辑
此外,我建议您查看 Remote Debugging Port 功能,它允许您使用 Chromium DevTools 调试加载的网页。