我正在开发一个PHP-html / Ajax的私人网站和一个Java的客户端程序。
我刚看到苹果可以通过Firefox或其他方式打开iTunes来加载内容。
我想做同样或更好的事情:
我尝试制作一个可以与javascript“对话”的程序,或者只是编写一个lockFile(tempfile),因此通过这个获取数据,我尝试至少获得一个通信Web浏览器 - > java,但我宁愿可能进行双向沟通。
因此,如果有人有任何解决方案,那将是很好的因为我googlised它,我尝试在html5中的本地存储,在javascript中的文件访问...没有真正的工作,我不希望程序问Avery时间服务器。< / p>
答案 0 :(得分:1)
您可以通过多种方式执行此操作,但必须牢记cross-domain restrictions。我一直在用套接字做这个。
1 - 您需要一个桥接器来与您的服务器通信,这可以通过Java小程序或闪存套接字桥来完成,这样您就可以调用服务器和您的javascript客户端代码。
2 - 您需要在服务器中使用url-redirect规则,以便当您的客户端发出请求时,它总是在同一个域中进行,但最终会获得套接字服务器的位置。您的客户端无法访问其他域,但您的服务器可以。这是跳过跨域限制所必需的。
我希望这会有所帮助。
答案 1 :(得分:0)
您可以查看允许将Google Chromium引擎嵌入Java Swing应用程序的JxBrowser库。您可以使用此库将Browser组件嵌入到客户端Java应用程序中并加载PHP Web页面,例如iTunes加载App Store。
它提供了用于Java-to-JavaScript-to-Java双向通信的API:http://www.teamdev.com/downloads/jxbrowser/docs/JxBrowser-PGuide.html#javascript-java-bridge
以下代码演示了如何嵌入浏览器组件,加载URL,在加载的网页上调用JavaScript代码以及在JavaScript端注册Java函数,每当JavaScript调用它时都会调用它:
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.BrowserFactory;
import com.teamdev.jxbrowser.chromium.BrowserFunction;
import com.teamdev.jxbrowser.chromium.JSValue;
import com.teamdev.jxbrowser.chromium.events.FinishLoadingEvent;
import com.teamdev.jxbrowser.chromium.events.LoadAdapter;
/**
* The sample demonstrates how to register a new JavaScript function and
* map it to a Java method that will be invoked every time when the JavaScript
* function is invoked.
*/
public class JavaScriptJavaSample {
public static void main(String[] args) {
Browser browser = BrowserFactory.create();
// Register "MyFunction" JavaScript function and associate Java callback with it
browser.registerFunction("MyFunction", new BrowserFunction() {
public JSValue invoke(JSValue... args) {
for (JSValue arg : args) {
System.out.println("arg = " + arg);
}
return JSValue.create("Hello!");
}
});
// Create JFrame and embed Browser component to display web pages
JFrame frame = new JFrame();
frame.add(browser.getView().getComponent(), BorderLayout.CENTER);
frame.setSize(800, 600);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
// Register Load listener to get notification when web page is loaded completely
browser.addLoadListener(new LoadAdapter() {
@Override
public void onFinishLoadingFrame(FinishLoadingEvent event) {
if (event.isMainFrame()) {
Browser browser = event.getBrowser();
// Invoke our registered JavaScript function
JSValue returnValue = browser.executeJavaScriptAndReturnValue(
"MyFunction('Hello JxBrowser!', 1, 2, 3, true);");
System.out.println("return value = " + returnValue);
}
}
});
browser.loadURL("about:blank");
}
}