いつも答えを見つけることができたので、初めてここで質問しなければなりませんでした。Java または .jnlp ファイルがどのように機能するかはわかりません。
プロジェクトのコンテキスト
私のサイトには、クリックしてファイルをダウンロードすると空白のページが読み込まれる Web ページがあります。次に、この空白のページが .jnlp ファイルをロードし、ユーザーが Java コードを開始すると、このファイルが Java コードを実行します。残念ながら、多くのユーザーは何が起こっているのかを理解するのに苦労しています。私の仕事は、このダウンロードを Magento システムにラップし、指示を追加して、人々がどこにいるのかを知ることです。
問題
すべてが思い通りに機能しています。唯一の例外は、.jnlp ファイルが起動時に「アプリケーションを起動できません」というエラーを表示することです。問題は、Web サイトのコンテンツ全体がファイルに書き込まれているため、失敗することです。私が見つけた唯一の回避策は、新しい空白のウィンドウで .jnlp ファイルを起動することです....これは、私がやろうとしていた目的を無効にします。
質問
新しいタブを開いたり、ページを空白にしたりせずに (.jnlp 起動コードを使用しても)、ページで .jnlp ファイルを起動する方法はありますか?
コード
.jnlp ファイルを起動するために使用されるコードは次のとおりです。
<?php
$map_name = isset($_GET['name']) ? filter_var($_GET['name'], FILTER_SANITIZE_STRING ) : redirect();
$map_version = isset($_GET['version']) ? filter_var($_GET['version'], FILTER_SANITIZE_NUMBER_INT ) : redirect();
$expiration = (time() + (2*24*60*60)) * 1000;
$java = isset($_GET['java']) ? filter_var($_GET['java'], FILTER_SANITIZE_STRING ) : "false";
// check if java is ready, then execute the chip updater
if( $java == "ready" ){
// load jnlp template
$dom = new DOMdocument('1.0', 'utf-8');
$dom->formatOutput = true;
$dom->load('template.jnlp.php');
$node = $dom->getElementsByTagName("application-desc")->item(0); // locate the start place and prep for insertion
// map name attribute
$var = $dom->createElement("argument", base64_encode($map_name)); // place a new argument tag and place an encoded name there
$node->appendChild($var);
// map version attribute
$var = $dom->createElement("argument", base64_encode($map_version)); // place a new argument tag and place an encoded version there
$node->appendChild($var);
// set expiration attribute
$var = $dom->createElement("argument", base64_encode($expiration)); // place a new argument tag and place an encoded expiration time there
$node->appendChild($var);
// output jnlp mime header and force download=
header("Content-Type: application/x-java-jnlp-file");
header("Content-Disposition: attachment; filename=update.jnlp");
//header("Content-Type: text/xml");
// output xml content
echo $dom->saveXML();
//echo $dom->saveXML($node);
} // end
else{
echo <<<EOD
<?xml version="1.0" encoding="UTF-8"?>
<html>
<head></head>
<body>
<script src="http://www.java.com/js/deployJava.js" type="text/javascript"><!-- // --></script>
<script type="text/javascript">
if (deployJava.versionCheck('1.6') || deployJava.versionCheck('1.7')) {
var str = location.href;
var z = str.replace("https://","http://");
var n = z.replace("?download=1","");
var url = n + "&java=ready";
window.location = url; // possibly replace with = ((location.href).replace("?download=1","")) + "&java=ready"
}
else{
alert("We have detected that you either do not have Java installed, or that it may be an older version. We are redirecting you to the Java download site where you will be able to install the newest version of Java. <!!! -- If the window does not load, you may need to allow popups from our site. Please watch for a popup warning and allow it to then relaunch! -- !!!>");
var url="./update2.php";
window.open(url);
window.history.back();
}
</script>
</body>
</html>
EOD;
}
注: $_POST() の代わりに $_GET() を使用するなど、システムのセットアップ方法によって修正に時間がかかるなど、いくつかの悪い慣行があることは理解しています。また、システムのフレームワークの同じページでこのコードを使用すると、DOM オブジェクトが Web ページからすべてを取得しているため、エラーが発生することも理解しています。このコードは私が入社する前に開発されたものであり、機能するように微調整できるかどうか、または別の方法を採用する必要があるかどうかを確認しようとしています。
共有できる情報をいただければ幸いです。ありがとう!