2011-10-17 16 views
7

HTML dosyamda bir dize değeri döndüren javascript işlevi xxx_return() var. Bu değeri Java katmanından alabilmemin herhangi bir yolu var mı?Bir Javascript işleviyle nasıl konuşulur SWT

Bu html'yi görüntülemek için SWT kabuk kullanıyorum. SWT bir betik fonksiyonunun dönüş değerlerini almak için herhangi bir özelliği taşıyor mu?

düzenleme:

Kodum aşağıda gibi bir şey: paketin test.html.simulation;

import org.eclipse.swt.SWT; 
import org.eclipse.swt.SWTException; 
import org.eclipse.swt.browser.Browser; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 

public class BrowserExample{ 
public static void main(String[] args) 
{ 
    Display display = new Display(); 
    final Shell shell = new Shell(display); 
    String html=""; 
    Object ob=null; 
    shell.setText("Browser Example"); 
    shell.setSize(500, 350); 

     final Browser browser = new Browser(shell, SWT.NONE); 
     browser.setBounds(5, 75, 600, 400); 

     browser.setUrl("http://localhost/test/tryxml.html"); 

     shell.open(); 
     //System.out.println(browser.getUrl()); 
     //try 
     { 
     html=(String)browser.evaluate("returnHTML();"); 
     }/*catch(SWTException e) 
     { 
      System.out.println(e.getMessage()); 

     }*/ 
     System.out.println(html); 

     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
      } 

     display.dispose(); 


} 

Bu kod bana bir SWT beklenen Nesne gibi İstisna verir:

<script> 
function returnHTML() 
    { 
    var str=document.body.innerHTML; 
    //alert(str); 
    return str; 
    } 
</script> 

kimse bulabilir i gibi komut etiketinde bir fonksiyonu yazdım java komut dosyasında

Exception in thread "main" org.eclipse.swt.SWTException: Object expected 
at org.eclipse.swt.browser.WebBrowser$EvaluateFunction.function(Unknown Source) 
at org.eclipse.swt.browser.WebSite.Invoke(Unknown Source) 
at org.eclipse.swt.browser.WebSite$7.method6(Unknown Source) 
at org.eclipse.swt.internal.ole.win32.COMObject.callback6(Unknown Source) 
at org.eclipse.swt.internal.ole.win32.COM.VtblCall(Native Method) 
at org.eclipse.swt.internal.ole.win32.IDispatch.Invoke(Unknown Source) 
at org.eclipse.swt.ole.win32.OleAutomation.invoke(Unknown Source) 
at org.eclipse.swt.ole.win32.OleAutomation.invoke(Unknown Source) 
at org.eclipse.swt.browser.IE.execute(Unknown Source) 
at org.eclipse.swt.browser.WebBrowser.evaluate(Unknown Source) 
at org.eclipse.swt.browser.Browser.evaluate(Unknown Source) 
at test.html.simulation.BrowserExample.main(BrowserExample.java:29) 

Bu hatadır? Hatanın nerede olduğunu anlayamıyorum.

Teşekkürler.

cevap

4

Bir SWT Browser nesnesi kullanın. Daha sonra String result = (String)Browser.evaluate("xxx_return();")'u kullanabilirsiniz.

+0

Sorumu düzenledim. Dediğim gibi yaptım, ama bana bir istisna veriyor. Hata buluyor musunuz? Teşekkürler – Kris

+1

'Browser # assessment' ile ilgili bir hata var ve IE9 ile null dönüş değerleri: https://bugs.eclipse.org/bugs/show_bug.cgi?id=344597. Bu konuda çalışmak için, 'Browser.evaluate ('foo() ||' ';')' işlemini yapabilirsiniz. Bunu, sabit bir dizge döndüren bir Javascript işlevine basitleştirebilir misiniz? Bu başarılı mı? –

+1

Browser.evaluate ("return foo()") olarak değerlendirerek String'i javascript'ten alabilirim; – Kris

4

Bunu fark ettim, Browser.evaluate() sayfanın kabuğa yüklenmesinden önce çağrılmasından beri istisna oluştu. Tamamlamayı öğrenmek için bir ProgressListener ekledim ve çalışmayı denedim. Ayrıca tüm

0

Yukarıdaki çözümler, ifade önünde "geri dönüşü" add

browser.addProgressListener(new ProgressListener() { 
       public void changed(ProgressEvent event) 
       { 

       } 
       public void completed(ProgressEvent event) 
       {String htm; 
       htm=(String)browser.evaluate("return returnHTML()"); 
       System.out.println(htm); 
       } 
      }); 

teşekkürler. Ayrıca, değerlendirdiğiniz şeye bağlı olarak, tamamlanmış etkinlik göz ardı edilebilir. Aşağıdaki ifadeler sadece çalışır.

Elbette
browser.evaluate("return 4 + 5;") 

tarayıcıda yüklü sayfasından javascript değerlendirirken, aksi takdirde javascript yüklü edilmemiş olabilir, sonra tamamlanan olay çağrılmalıdır değerlendirir.

İlgili konular