2014-06-25 110 views
0

我一直在試圖圍繞這個包裹我的頭。請幫我把我弄糟的地方。Java Applet調用JavaScript函數返回值

以相若方式在這個網址電話: http://www.codejava.net/java-se/applet/call-javascript-function-from-java-applet

我從我的Java小程序的初始化中進行的呼叫並啓動方法給瀏覽器。

的Javascript是這樣:

function getHHandler() { 
    console.log("handler requested from applet"); 
    return HHandler.handler(); 
} 

HHandler.instance = null; 

function HHandler() { 
    ... 
} 

HHandler.prototype = { 
    doStuff : function() { 
    }  
}; 

HHandler.handler = function() { 
    if(HHandler.instance == null) 
     HHandler.instance = new HHandler(); 
    return jsb.instance; 
}; 

下面是來自小程序我調試準備的方法 - 沒有什麼特別的,至少它應該是:

private Object getHandlerObject() { 
    Object jo = browser.call("getHHandler", null); 
    log("call getJSBHandler():" + jo); 

    return jo; 
} 

我經歷過的神諭的例子,無數的網站,教程,文檔和所有指向相同的調用和eval方法。

經驗 會發生什麼事是當小程序調用到getHHandler javascript函數 - 我可以看到控制檯日誌在瀏覽器中看到的動作沒有實際發生,但是從JavaScript return語句從不回Java代碼。所以Java留下了一個我沒有用過的空對象。 我甚至仔細檢查過,以確保在返回語句之前js var不爲null。

我能理解爲什麼 browser.call(「HHandler.handler」,null); 會嚇壞了,並拋出一個NotAFunction異常,但在這種情況下,一切似乎順利,但返回值。

<applet id="appletId" archive="../path/to/applet.jar" code=com.package.Main.class width="1" height="1" mayscript></applet> 

它甚至不關心applet是自簽名還是根本不簽名。 Mayscript被添加 - 不是它有所作爲。

任何建議/輸入?

+0

*「它甚至不關心,如果小程序是自簽名或完全沒有簽名。」*它也沒有任何區別。 「自簽名」的小程序現在被認爲是未簽名的。 –

回答

0

您正在使用哪個Java版本?最近* racle更改了小程序中的lots of things。所有applet都需要使用官方證書進行簽名(自簽名不足)。 並且還請參閱LiveConnect changes since 7u45

現在

一)如果你使用使用的官方證明書或

b)和上最新的Java嘗試較早的一個,看它是否有效。如果是這種情況,那麼你知道從哪裏開始......

+0

Java插件10.60.2.19 使用JRE版本1.7.0_60-b19 x64 我嘗試使用文字對象(int和字符串)作爲返回值,有趣的是足夠在java中顯示。 Javascript掛在行HHandler.handler();就好像後面的代碼沒有被執行一樣(甚至沒有日誌)。 –

+0

您沒有回答完整問題:您是否嘗試過官方證書?如果不是a)嘗試使用較老的java b)將java安全性滑塊降低到中等c)將您的url添加到異常站點列表d)最後但並非最不重要的屬性設置權限 – Lonzak