JavaFX WebView 不加载 jar 中的上层文件夹脚本

2024-04-06

我正在尝试创建基于 JavaFX WebView 的代码编辑器。我将 jquery 加载到由 WebView 加载的 .html 文件中,如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Code editor</title>
    <link type="text/css" rel="stylesheet" href="styles.css"/>
    <script type="text/javascript" src="../libs/jquery-3.1.1.js"></script>
    <script type="text/javascript" src="scripts.js"></script>
</head>
<body>
    <div id="content">
        Loading...
    </div>
</body>
</html>

所以,这个文件加载到了WebView中,但是jquery没有加载! script.js 已加载,但 jquery-3.1.1.js 未加载!我建议问题出在文件系统的某个地方。我的文件存储为 jar 文件资源,因此我的 index.html 路径如下:

jar:file:/D:/Pe3oHaHc/YandexDisk/Projects/Mira/Mira/build/libs/Mira-0.0.1.jar!/windows/html/editor/scripts.js

我通过 script.js 中的代码得到它:

var scripts = document.getElementsByTagName("script");
alert(scripts[1].src);

因此,scripts.js 已加载,但 jquery-3.1.1.js 未加载,因为它位于上层文件夹中!我不能在 script.js 中使用 $ 。

但是,如果我将 jquery-3.1.1.js 放在与 index.html 相同的文件夹中,它会加载得很好。我猜这是因为 jar 文件内的奇怪路径。你能帮助我吗?我真的不想将 jquery 文件放入与 index.html 相同的文件夹中。


jar 协议不允许..相对位置说明符。

从 jar 加载的资源加载相对 URL 的请求将使用与加载原始资源相同的协议。在本例中,由于原始资源是从 jar 加载的,因此jar:使用协议。您可以在以下位置找到 jar 协议的定义JarURL连接 https://docs.oracle.com/javase/8/docs/api/java/net/JarURLConnection.html类文档。

您可以使用不同的协议来加载资源,例如http: or file:, 在这种情况下..将按照这些协议的理解工作..。为此,您需要从 jar 文件中提取相关资源并将它们托管在 Web 服务器上或本地文件系统 https://github.com/osiam/osiam/blob/master/src/main/java/org/osiam/OsiamHome.java#L98。这可能不是你想要的。

一个更简单的解决方案是不使用..在您的 html 文件中,可以将项目放置在 jar 内众所周知的根目录下并使用绝对引用(例如/libs/jquery-3.1.1.js),或者将项目包含在与 html 相同的文件夹或其子文件夹中(例如jquery-3.1.1.js or libs/jquery-3.1.1.js).

我知道这不是您想要的答案,但我没有确切的解决方案来精确地执行您想要的操作。

相关问题:

  • 如何从 javafx.scene.web.WebEngine#loadContent 加载的 html 页面访问 css 和图像文件? https://stackoverflow.com/questions/8923801/how-to-reach-css-and-image-files-from-the-html-page-loaded-by-javafx-scene-web-w
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX WebView 不加载 jar 中的上层文件夹脚本 的相关文章