2016-12-02 2 views
1

JavaFX WebViewに基づいてコードエディタを作成しようとしています。JavaFX WebViewがjarの上位フォルダスクリプトをロードしない

<!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のはロードされません。私はこのようにWebViewのでロードされた私の.htmlファイルにjqueryのをロードしています! script.jsがロードされましたが、jquery-3.1.1.jsはロードされていません!私は問題がファイルシステムのどこかにあることを示唆しています。私のindex.htmlパスが似ているので、私のファイルは、JARファイルのリソースとして格納されます。

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

私はscripts.jsにこのコードでそれを得る:

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

ので、scripts.js jquery-3.1.1.jsは上のフォルダにありません!私はscripts.jsで$を使うことはできません。

しかし、jquery-3.1.1.jsをindex.htmlと同じフォルダに置くと、うまく読み込まれます。私はそれが奇妙なパスのjarファイル内にあるためだと思います。手伝って頂けますか?私は本当にindex.htmlに同じフォルダにjqueryファイルを配置したくないです。

答えて

1

jarプロトコルでは、相対位置指定子..が許可されていません。

jarからロードされたリソースから相対URLをロードする要求は、元のリソースをロードするために使用されたのと同じプロトコルを使用します。この場合、元のリソースがjarからロードされるため、jar:プロトコルが使用されます。 jarプロトコルの定義は、JarURLConnectionクラスのドキュメントにあります。

異なるプロトコルを使用してリソースを読み込むことができます(例: http:またはfile:です。この場合、..は、..を理解するプロトコルとして機能します。これを行うには、関連するリソースをjarファイルから抽出し、Webサーバーまたはlocal file systemでホストする必要があります。おそらくあなたが望むものではありません。

もっと簡単な解決策は、jar内のよく知られたルートディレクトリの下にアイテムを置いて絶対参照(例:/libs/jquery-3.1.1.js)を使用するか、同じフォルダ内にアイテムを含めるかのいずれかで、htmlファイルに..を使用しないことですhtmlまたはそのサブフォルダ(例:jquery-3.1.1.jsまたはlibs/jquery-3.1.1.js)。

私はこれがあなたが望む答えではないことを知っていますが、あなたが望むものを正確に行う正確な解決策はありません。

関連質問:

関連する問題