Web浏览器和Java之间的共处



我正在php-html/ajax和java中的客户端程序开发一个私人网站。

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

我想做相同或更好的事情:

我尝试制作一个可以与JavaScript"交谈"的程序或仅写一个lockfile(tempfile),因此通过此数据获取数据,我尝试至少获得通信网络浏览器 -> Java,但是我会如果可能的话,双向交流。

因此,如果有人有任何解决方案,那将是很棒的,因为我对其进行了谷歌搜索,我尝试了HTML5中的本地存储,JavaScript中的文件访问……没有什么真正可行的,我不希望该程序问服务器Avery时间。<<<<<<<<<<<<<<<<<<<</p>

您可以通过多种方式执行此操作,但必须牢记跨域限制。我一直在用插座做这个。

1-您需要桥梁与服务器相交,这可以使用Java applet或Flash套接字桥进行完成,以便您可以调用服务器和JavaScript客户端代码。

2-您需要服务器中的URL重新定义规则,以便当您的客户端提出请求时,它总是在同一域中,但最终将套接字服务器置于位置。您的客户端不能转到其他域,但是您的服务器可以。这是跳过跨域限制所需的。

我希望这会有所帮助。

您可以查看允许将Google Chromium Engine嵌入Java Swing应用程序的JXBrowser库。您可以使用此库将浏览器组件嵌入客户端Java应用程序并加载您的PHP网页,例如iTunes加载App Store。

它为双向通信Java-to-javascript-to-java提供API:http://www.teamdeamdev.com/downloads/jxbrowser/docs/jxbrowser/jxbrowser-pguide.html#javascript-javascript-java-bridge-bridgeide/P>

以下代码演示了如何在加载网页上嵌入浏览器组件,加载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");
    }
}

相关内容

  • 没有找到相关文章

最新更新