2009-08-12 63 views
2

我正在爲一家開發中的公司工作,並且正在對Web應用程序進行重大設計,每次點擊後重新加載所有內容以廣泛使用Javascript,因此它實際上就像一個真正的Web應用程序。其中一個特點是使用基於Web的Painter(想到Web上的MSPaint),我將其嵌入到按需頁面中。在圖像上傳完成後,Web應用程序將卸載小程序並繼續顯示文件上傳到的目錄。通過Javascript殺死Java Applet

這是麻煩開始的地方。這一切都適用於IE和Safari,但不適用於Firefox 3.5(儘管3.0完美)。 Firebug告訴我expando屬性丟失了。

我以前正在處理的Web應用Tiparlo有一個類似的問題(實際上,通過jQuery在applet上完成的任何操作都有問題),但通過包裝div來控制(隱藏和顯示) div而不是applet。這不幸的是不適用於這個Web應用程序,因爲Applet必須被銷燬,而不僅僅是隱藏和顯示,因爲它佔用了太多的資源以便在整個不需要的時間運行。

簡而言之:是否有可能使Applet通過Javascript破壞自己?另外:是否有解決jQuery/expando/applet問題?我知道小程序在HTML 4.01嚴格中已被棄用,但將其更改爲對象現在不是一個選項。

編輯:我已經添加了Firefox + Firebug的圖片,向您顯示實際的錯誤消息。發佈代碼沒有上帝,因爲它在其他所有瀏覽器上都是完美無瑕的,並且是Firefox 3.5特有的問題。 Here be pictures

注意:您可以忽略來自button.js的JS Bug。

+4

如果您銷燬環繞小程序的DIV,會發生什麼情況? (不隱藏它,用removeElement和刪除它 – 2009-08-12 16:00:26

+1

我試過了,但無濟於事。我的理論:我想通過隱藏父div,瀏覽器本身也照顧隱藏孩子,而不是Javascript。刪除父div,這也是Javascript的工作,刪除子applet,從而導致expando Bug出現 我一直在尋找jQuery Bug Tracker,並且該1.3.3版本的路線圖中列出了該特定的Bug。由於我不能等待它自己修復(由jQuery開發團隊修復),我必須找到一個解決方法。 – Mike 2009-08-13 06:28:48

回答

1

您可以隨時在一個iframe中加載小程序,只需從加載小程序的頁面導航即可。這會殺死它。

你的,如果你要撥打的從JavaScript破壞將是把這樣的事情在其他選項。

<script> 
    document.MyApplet.killApplet(); 
</script> 

public void killApplet() { 
    AccessController.doPrivileged(new PrivilegedAction() { 
     public Void run() { 
      // kill the JVM System.exit(0); return null; 
     } 
    }); 
} 

這不是一個很好的方式殺死一個小應用程序,但是,新的瀏覽器不投一個JS錯誤,對像IE6這樣的老版本,它會拋出一個js錯誤。

+0

是的,這個解決了這個問題(生成一個新的,但我可以處理那個)。 – Mike 2009-08-14 07:54:24

+0

什麼是它創建的新問題,只是好奇 – Keibosh 2009-08-17 15:17:54

+0

如果在JavaScript調用完成後終止applet,它可能會避免出現錯誤,您可以使用java.util.Tim er.schedule()。 – 2013-06-03 16:36:50

0

我建議你創建一個監視被殺死的applet的類。將監視器作爲某種servlet運行,並在需要終止的時候讓javascript發佈'kill applet'命令。