2011-01-16 21 views
0

私はちょっとした実験をしていて、YouTubeのページをつかんで、最高品質のMP4リンクを返してから、これをHTML 5のビデオ要素で再生します。URLをJavascriptでリクエストし、Javaアプレットを使用してURLコンテンツを取得し、Javascriptに戻りますか?


(MP4リンクがIPアドレスにロックされている)今私はURLのコンテンツ(YouTubeの)を取得するためのcURLとPHPを使用していたが、それは私のローカルサーバー上で動作します。私は、Javaアプレット以外のクロスドメインルールのためにページコンテンツを取得する他の方法は考えられません。

URLの内容を返すJavaアプレットを作成しました。私は方法の開始でのgetURLを(実行する場合さて、私は、私のページに私のアプレットを持って

のJava

import java.applet.Applet; 
import java.awt.*; 
import java.io.ByteArrayOutputStream; 
import java.io.InputStream; 
import java.io.PrintStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
//import java.net.SocketPermission; 
//import java.net.URLDecoder; 
//import java.net.URLEncoder; 
//import java.util.Locale; 
//import netscape.javascript.JSObject; 

public class URLFetcherabc extends Applet 
{ 
public String URLContent = "Currently empty"; 

public void init() 
{ 
    System.out.println("Ready to recieve URL"); 
} 
public void paint(Graphics g) { 
     g.drawString("Java loaded.", 0, 10); 
} 
    public void start() 
    { 
     String container = getURL("http://www.youtube.com/watch?v=LQ0AFriC7ZM&Bingbv", "GET"); //<-- This works 
     System.out.println(container); //<-- This works 
     URLContent = container; 
    } 
    public void bingo() 
    { 
     String container = getURL("http://www.youtube.com/watch?v=LQ0AFriC7ZM&Bingbv", "GET"); 
     System.out.println(container); 
     URLContent = container; 
    } 

    public String getURL(String url, String httpMethod) 
    { 
    try 
    { 
     URL u = new URL(url); 
     HttpURLConnection conn = (HttpURLConnection)u.openConnection(); 
     conn.setRequestMethod(httpMethod); 
     conn.setRequestProperty("User-Agent", ""); 
     InputStream is = conn.getInputStream(); 
     ByteArrayOutputStream output = new ByteArrayOutputStream(); 
     byte[] buffer = new byte[1024]; 
     for (int bytesRead = 0; (bytesRead = is.read(buffer)) != -1;) { 
     output.write(buffer, 0, bytesRead); 
     } 
     URLContent = output.toString(); 
     return URLContent; 
    } catch (Exception e) { 
     System.out.println(e); 
    }return null; 
    } 


} 

)それは私がのgetURLを呼び出す場合、正しくURLのコンテンツを返しますが、しますビンを呼び出し、この

Javascriptを

var URLFetcherApplet = document.getElementById('URLFetcher'); 
    URLFetcherApplet.bingo(); 

のようなJavaScriptからメソッドJavaでgo()を実行すると、Javaコンソールにエラーが表示されます。 「java.security.AccessControlException:アクセスが拒否されました ヌル(java.net.SocketPermission www.youtube.com:80解決、接続)」私は、起動時に同じメソッドを実行するのであれば

を()、それは動作しますが、しかし、もし私がJavascriptを使ってそれにアクセスしようとすると、それはなぜ失敗するのでしょうか?

おかげ

+0

はあなたが実際に署名せずにJavaでURLを取得することができてもよろしいです:-)例外を飲み込むていません?私はクロスドメインルールが署名のないアプレットに適用されると考えています。 –

+0

アプレットは署名されていますが、ソースをコンソールに出力してテストしたので、URLのソースを正しく取得します。 –

答えて

1

確かに一つのこと:あなたは空のcatchブロックを持っているので、あなたがそれらを隠し、すべての例外を嚥下されています。関数がnullを返すと言うので、最も可能性の高いシナリオはtry-catchブロックのどこかで例外が発生するということです。コードを

} catch (Exception e) { 
    throw new RuntimeException(e); 
} 

に変更し、Javaコンソールに表示される内容を確認します。

編集:良いアドバイスを聞く準備ができていない場合は、質問しないでください。私は99.999%の間違いが本当にあなたのJavaコード(あなたのコメントに関係なく)であり、適切なエラー報告を追加するとあなたに瞬時に本当の答えを与えるだろうと確信しています。新しいRuntimeException(e)を追加し、コンソールを見てください。

おそらくあなたのアプレットが署名されていない(少なくともあなたはそれについて何も書いていない)ため、同じ発信元ポリシーがまだ適用されているので、署名されていないアプレットに適用すると、Javaはセキュリティ上の大きな穴になります)。それが判明した場合

私は右だ、私はあなたが

第二編集:-)私は失礼考慮する場合でも、私の答えを受け入れることを願っ:私は(コンパイル、Netbeansの、少し編集に貼り付ける)あなたのコードをチェックしそれは完全に動作します(firefox、エクスプローラ - 両方のウィンドウ)とあなたの症状はシフトしているようです(あなたはそれがヌルを返すと言うか、それは未定義を返すか、それを全く呼び出すことはできません) - 私は持っています最後のアイデア。人々がよくやる間違いは、実際に読み込まれる前にオブジェクト(アプレットやフラッシュなど)を呼び出すことです。どの段階であなたはJavaScriptを実行していますか?アプレットがロードされていますか?いくつかのボタンでタイムアウト(数秒)を追加したり、 "onclick"から関数を実行するとどうなりますか?何か変わるのですか?どのブラウザを使用していますか?あなたのjavascriptは何ですか?どのオペレーティングシステムですか?どのプラグインバージョン?問題を再現できない限り、私たちは手助けできません。

第3編集:(疑問の著者によるいくつかの実験の後)。このように、たとえば、PriviledgedActionにjavascriptの呼び出しをラップ:

public String callFromJs(final String url, final String method){ 

return AccessController.doPrivileged(new PriviledgetAction<String>(){ 
    public String run(){ 
     return getUrl(url, method); 
    } 
}); 
} 

+0

Javaはエラーを出さないので、JavascriptでAppletメソッドを呼び出しているときにエラーが発生すると思います。 "TypeError:Result of Result 'URLFetcher.getURL' [undefined]は関数ではありません。 –

+0

JavascriptはURLFetcher.getURL(urltofetch)を呼び出しますが、アプレットのメソッドはgetURL(String url、String httpMethod)です。 – RealHowTo

+0

私はそれを "var result = URLFetcher.getURL(urltofetch、" GET ");"に変更しました。しかし、それはまだ関数ではないと言って、私は正しくアプレットをターゲットですか? –

0
// get the XML object 
function get_xml_object() { 
    if (window.ActiveXObject) return new ActiveXObject('Microsoft.XMLHTTP'); 
    else if (window.XMLHttpRequest) return new XMLHttpRequest(); 
    else { 
     alert('Your browser does not support AJAX.'); 
     return null; 
    } 
} 

// fetch url 
function fetch_url(whichurl) { 
    var myobj=get_xml_object(); 
    myobj.open("GET",whichurl,false); 
    myobj.send(); 
    return myobj.responseText; 
} 
関連する問題