1

我正在用 PHP-html / Ajax 开发一个私人网站,并用 Java 开发一个客户端程序。

我刚刚看到苹果可以通过 Firefox 或其他方式打开 iTunes 来加载内容。

我想做同样的事情或做得更好:

我尝试制作一个可以与javascript“对话”的程序,或者只编写一个lockFile(tempfile)并通过这个获取数据,我尝试至少获得一个通信Web浏览器-> java,但如果可能的话我宁愿双向通信。

因此,如果有人有任何解决方案,那将是很好的,因为我用谷歌搜索了它,我尝试了 html5 中的本地存储,javascript 中的文件访问……没有什么真正起作用,我不希望程序每次都询问服务器。

4

2 回答 2

1

您可以通过多种方式做到这一点,但您必须牢记跨域限制。我一直在用套接字做这个。

1 - 您需要一个网桥来将您的网站与您的服务器通信,这可以使用 java 小程序或 flash 套接字网桥来完成,以便您可以调用您的服务器和您的 javascript 客户端代码。

2 - 您需要在您的服务器中使用 url-redirect 规则,以便当您的客户端发出请求时,它总是在同一个域中进行请求,但最终会到达您的套接字服务器所在的位置。您的客户端不能转到其他域,但您的服务器可以。这是跳过跨域限制所必需的。

我希望这有帮助。

于 2012-11-10T16:33:06.767 回答
0

您可以查看允许将 Google Chromium 引擎嵌入 Java Swing 应用程序的JxBrowser库。您可以使用这个库将浏览器组件嵌入到您的客户端 Java 应用程序中并加载您的 PHP 网页,就像 iTunes 加载 App Store 一样。

它为 Java 到 JavaScript 到 Java 的双向通信提供 API:http ://www.teamdev.com/downloads/jxbrowser/docs/JxBrowser-PGuide.html#javascript-java-bridge

以下代码演示了如何嵌入浏览器组件、加载 URL、在加载的网页上调用 JavaScript 代码以及在 JavaScript 端注册每次 JavaScript 调用时都会调用的 Java 函数:

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");
    }
}
于 2014-06-24T21:42:20.650 回答