2016-03-23 3 views
3
import com.teamdev.jxbrowser.chromium.Browser; 
import com.teamdev.jxbrowser.chromium.BrowserFunction; 
import com.teamdev.jxbrowser.chromium.JSValue; 
import com.teamdev.jxbrowser.chromium.LoggerProvider; 
import com.teamdev.jxbrowser.chromium.swing.BrowserView; 

import javax.swing.*; 
import java.awt.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class JavaScriptJavaSample { 
    public static void main(String[] args) { 
    LoggerProvider.setLevel(Level.OFF); 
    Browser browser = new Browser(); 
    BrowserView browserView = new BrowserView(browser); 

    browser.registerFunction("MyFunction", new BrowserFunction() { 
     public JSValue invoke(JSValue... args) { 
      System.out.println("MyFunction is invoked!"); 
      return JSValue.create("Hello!"); 
     } 
    }); 

    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    frame.add(browserView, BorderLayout.CENTER); 
    frame.setSize(700, 500); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 

    browser.loadHTML("<html><body><a href='#' onclick='MyFunction();'>Call Java method</a></body></html>"); 
} 
} 

Ich habe alle JAR-Datei hinzufügen, aber BrowserFunction existiert nicht, warum?jxBrowser Fehlerklasse existiert nicht

alle anderen Klassen perfekt funktionieren, und nicht verstehen, das Problem, ich

Antwort

2

Wie weit im Voraus alle alle jar dank importiert, wie ich weiß, BrowserFunction() mit der Funktion registrieren in neuen gegangen ist Versionen von jxbrowser. Es gibt einen neuen Weg in 6.1 Version beschrieben here. Setzen Sie die neue Art und Weise in Ihrem Code:

import com.teamdev.jxbrowser.chromium.Browser; 
import com.teamdev.jxbrowser.chromium.BrowserFunction; 
import com.teamdev.jxbrowser.chromium.JSValue; 
import com.teamdev.jxbrowser.chromium.LoggerProvider; 
import com.teamdev.jxbrowser.chromium.swing.BrowserView; 

import javax.swing.*; 
import java.awt.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class JavaScriptJavaSample { 
    public static void main(String[] args) { 
     LoggerProvider.setLevel(Level.OFF); 
     Browser browser = new Browser(); 
     BrowserView browserView = new BrowserView(browser); 

     browser.addLoadListener(new LoadAdapter() { 
      @Override 
      public void onFinishLoadingFrame(FinishLoadingEvent event) { 
       if (event.isMainFrame()) { 
        Browser browser = event.getBrowser(); 
        JSValue value = browser.executeJavaScriptAndReturnValue("window"); 
        value.asObject().setProperty("java", new Events()); 
       } 
      } 
     }); 

     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.add(browserView, BorderLayout.CENTER); 
     frame.setSize(700, 500); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

     browser.loadHTML("<html><body><a href='#' onclick='alert(java.MyFunction());return false;'>Call Java method</a></body></html>"); 
    } 
} 

eine andere Datei erstellen Events Klasse zu halten:

public class Events { 

    public String MyFunction() { 

     System.out.println("MyFunction is invoked!"); 

     return new String("Hello"); 

    } 

} 

* Added return false bis zum Ende des onclick Attribut a Tag, Browser verhindert folgenden Link: href beim Klick. BTW, ich schlage vor, Sie verwenden main documentation Codes, wie sie aktuell sind.

+0

der Code funktioniert! Danke vielmals! –

+0

ist _LoadAdapter_ Teil von JxBrowser? oder ist das eine Klasse, die du selbst geschrieben hast? –

+0

Ist Teil von jxbrowser –

0

Um die BrowserFunction zu verwenden, sollten Sie die licence.jar haben und sie Ihrem Klassenpfad hinzufügen.
JxBrowser hat eine kostenlose 30-Tage-Testversion. Sie können die Lizenz auch kaufen.