2011-02-15 71 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部分不需要这个工作;这正是我碰巧正在使用的。

相关问题