2011-02-15 70 views
0

我在創建訪問錯誤,只有當我用Javascript調用函數(LiveConnect)時。只有LiveConnect的Java AccessControlException

該小程序調用函數postData並顯示響應(這很好用)。現在,如果我通過像這樣的小程序[]數組調用Javascript的這個函數,像document.applets[0].postData我得到的Socket /權限錯誤:未捕獲的異常:java.security.AccessControlException:訪問被拒絕(java.net.SocketPermission 174.132.167.66:80 connect,resolve)

內部調用相同的函數效果很好,但從javaScript調用時會出現訪問控制錯誤。

任何人都有過這樣的問題嗎?

+0

我應該補充一點,我正在使用簽署的Jar ... – 2011-02-15 20:04:38

回答

3

我最近遇到了同樣的問題,特別是在Mac上的Firefox。雖然我在街區使用SwingUtilities.invokeLater()

我工作的方式是將invokeLater調用包裝在AccessController.doPrivileged()塊中。舉例來說,如果我有我的小程序稱爲someAction()這是可調用從JavaScript的方法,我會做:

void someAction() { 
    AccessController.doPrivileged(new PrivilegedAction() { 
    public Object run() { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       // some privileged action here 
      } 
     }); 
    } 
    }); 
} 

這種方法似乎解決這個問題,我在Firefox。但是,它不會在Safari中遇到同源問題,例如,如果您想從不同於Applet的域中提供Javascript,

更新 我應該提到的是,invokeLater部分不需要這個工作;這正是我碰巧正在使用的。

相關問題