2013-03-28 7 views
1

처음으로 나는 여기에서 질문을해야했습니다. 항상 대답을 찾을 수 있었기 때문입니다. Java 또는 .jnlp 파일의 작동 방식을 알지 못합니다..jnlp을 실행하지 못했습니다.

프로젝트 컨텍스트

명 파일을 다운로드합니다 빈 페이지를로드 내 사이트에 웹 페이지가 있습니다. 이 빈 페이지는 사용자가 자바 코드를 시작할 때 자바 코드를 실행하는 .jnlp 파일을로드한다. 불행히도 많은 사용자는 무슨 일이 일어나고 있는지 이해하기가 어렵습니다. 내 작업은이 다운로드를 Magento 시스템에 랩핑하고 사람들이 현재 어디에 있는지 알 수 있도록 지침을 추가하는 것입니다. 구상으로

문제점

모든 작동된다. 유일한 예외는 .jnlp 파일이 시작할 때 "응용 프로그램을 시작할 수 없습니다"라는 오류를 표시합니다. 문제는 전체 웹 사이트의 콘텐츠가 파일에 기록되어 실패하는 것입니다. 내가 발견 한 유일한 해결 방법은 새 빈 창에서 .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; 
    } 

참고 : I는 $ _GET을 사용하는 등 나쁜 관행이 (가 이해) $ _POST() 대신에 시스템을 설정하는 방식으로 인해 수정하는 데 시간이 걸립니다. 또한 DOM 객체가 내 웹 페이지의 모든 것을 잡아 내고 있다는 것을 이해합니다. 이는 내 시스템 프레임 워크의 동일한 페이지에서이 코드를 사용하면 오류가 발생합니다. 이 코드는 회사에 도착하기 전에 개발되었으며 작동하도록 조정할 수 있는지 또는 다른 방법을 사용해야 하는지를 확인하려고합니다.

공유 할 수있는 의견을 보내 주시면 감사하겠습니다. 감사!

답변

0

나는 이것을 알아 냈다. 이 경우 별도의 페이지에서 열어야합니다. 이는 왜 이것이 구축되었는지에 대한 목적을 무효화합니다. 그러나 을 사용하여 파일을 올바르게 실행할 수있었습니다. display : none을 사용하여 을 숨기면 발견했습니다. 여전히 .jnlp 파일을 올바르게 다운로드합니다.

누군가 비슷한 솔루션을 실행하는 경우 한 가지 방법이 있습니다. 아무도 모른다면 다른 방법을 배우는 데 관심이 있습니다.

관련 문제