2017-08-29 96 views
1

[僅供參考,如果你看到的頁面是開起來也一樣,下一個也同這就是爲什麼我要停止上述的WebView的導航因此它可以在開回落僅一] [1]如何使用platform.runlater()在一個webview中禁用鏈接/超鏈接/導航,並在java中的另一個webview中打開該鏈接/超鏈接/導航

public class HV extends Application 
    { 
     @Override 
     public void start(Stage primaryStage) throws Exception 
     {     
      StackPane root = new StackPane(); 

     HBox hbox = new HBox(30); // create a HBox to hold 2 vboxes   

     // create a vbox with a textarea that grows vertically 
     VBox vbox = new VBox(10); 
     final WebView img = new WebView(); 
      final WebEngine webEngineImg = img.getEngine();  
     vbox.getChildren().addAll(img); 

     // create a vbox that grows horizontally inside the hbox 
     VBox vbox2 = new VBox();   
     final WebView browser = new WebView(); 
     final WebEngine webEngine = browser.getEngine(); 

     final WebView browser1 = new WebView(); 
     final WebEngine webEngine1 = browser1.getEngine(); 
      webEngine1.getLoadWorker().stateProperty() 
     .addListener(new ChangeListener<Worker.State>() { 
      @Override 
      public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) { 
      if (newState == Worker.State.SUCCEEDED) { 
      primaryStage.setTitle(webEngine1.getLocation()); 
       String trgurl=webEngine1.getLocation(); 
       System.out.println(trgurl); 


       if(trgurl.matches("(.*)img=(.*)")){ 

        int n = trgurl.indexOf("img="); 
        //String str1 = Integer.toString(n); 
        System.out.println(n+4); 
        int len = trgurl.length(); 
        System.out.println("string length is: "+trgurl.length()); 
        System.out.println(trgurl.substring(n+4,len)); 
        String find = "file:"+trgurl.substring(n+4,len); 
        System.out.println(find); 

        webEngineImg.load(find); 
        //webEngine1.load(find);// this is loading image 

        if (trgurl.matches("(.*)target=wb2(.*)")){ 
         //int n1= trgurl.indexOf("target="); 
         //String str1 = Integer.toString(n); 
        // System.out.println(n1+7); 
        // System.out.println(trgurl.substring(n1+7,98)); 
         boolean cancel(); 
        webEngine.load("url"); 

         } 
       } 
      } 
      } 

     }); 

     webEngine1.load("url"); 
     // String url = "https://eclipse.org"; 
       // Load a page from remote url. 
       // webEngine.load(url); 

     vbox2.setPadding(new Insets(3)); 
     vbox2.setSpacing(3); 
     vbox2.getChildren().addAll(browser1,browser); 

     HBox.setHgrow(vbox2, Priority.ALWAYS); 


     hbox.setPadding(new Insets(20)); 
//  StackPane.setMargin(hbox, new Insets(20)); 

     hbox.getChildren().addAll(vbox, vbox2); 
     root.getChildren().add(hbox); 
     Scene scene = new Scene(root, 500, 300); // the stack pane is the root node 


     primaryStage.setScene(scene); 
     primaryStage.show();   
    } 

    public static void main(String[] args) 
    { 
     Application.launch(args); 

    } 
} 

的debbuging - 這是我的代碼有三個在webview1中的webview完整的網站打開和在webviewimg中只有來自webview1的操作打開和在web視圖中的圖像我想加載一個編輯網址,但爲此我必須在webview1中禁用該鏈接的導航,以便我可以在webview中打開它我有tr Ÿplatform.runlater後運行在其它的WebView但即時得到錯誤狀態不能在串改變該鏈接,這是一段代碼,在那裏我嘗試添加

webEngine1.getLoadWorker().stateProperty() 
     .addListener(new ChangeListener<Worker.State>() { 
      @Override 
      public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) { 
      if (newState == Worker.State.SUCCEEDED) { 
      primaryStage.setTitle(webEngine1.getLocation()); 
       String trgurl=webEngine1.getLocation(); 
       System.out.println(trgurl); 
      if ((address.getQuery() + "").contains("target=true")) 
      { 
       Platform.runLater(() -> { 
        grid_layout.getChildren().remove(webEngine1); 
        grid_layout.add(webEngine1, 0, 1); 
        webEngine1.load(oldState); 

或如何在Java中插入了jQuery防止導航代碼在這裏

document.addEventListener('click', function(e) { 
    e.stopPropagation(); 
}, true); 
+0

我有acheve禁止使用jQuery嵌入JavaFX的鏈接,但它禁用點擊我也不想禁用點擊我只是想如果我點擊鏈接它不應該打開在同一個webview它應該打開在另一個目標webview是有任何類的PLZ幫助需要 –

回答

0

問題解決了。下面是代碼:

public class HV extends Application 
{ 

@Override 
public void start(Stage primaryStage) throws Exception 
{ 

    StackPane root = new StackPane(); 

    HBox hbox = new HBox(30); // create a HBox to hold 2 vboxes   

    // create a vbox with a textarea that grows vertically 
    VBox vbox = new VBox(10); 
    final WebView img = new WebView(); 
     final WebEngine Img = img.getEngine();  
    vbox.getChildren().addAll(img); 

    // create a vbox that grows horizontally inside the hbox 
    VBox vbox2 = new VBox();   
    final WebView browser = new WebView(); 
    final WebEngine wb2 = browser.getEngine(); 

    final WebView browser1 = new WebView(); 
    final WebEngine wb1 = browser1.getEngine(); 
     wb1.getLoadWorker().stateProperty() 
    .addListener(new ChangeListener<Worker.State>() { 
     @Override 
     public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) { 
       Platform.runLater(() -> { 
        final WebEngine wb1 = browser1.getEngine(); 
        if (wb1.getLocation().contains("img")) { 
         System.out.println("BrowserPane.ChangeListener cancelling " + wb1.getLocation()); 
         wb1.getLoadWorker().cancel(); 
         // if (newState == Worker.State.SCHEDULED) { 
         primaryStage.setTitle(wb1.getLocation()); 
         String trgurl = wb1.getLocation(); 
         System.out.println(trgurl); 
          if(trgurl.matches("(.*)img=(.*)")){ 
       int n = trgurl.indexOf("img="); 
       //String str1 = Integer.toString(n); 
       System.out.println(n+4); 
       int len = trgurl.length(); 
       System.out.println("string length is: "+trgurl.length()); 
       System.out.println(trgurl.substring(n+4,len)); 
       String find = "file:"+trgurl.substring(n+4,len); 
       System.out.println(find); 

       Img.load(find); 
         //webEngine1.load(find);// this is loading image 
         if (trgurl.matches("(.*)target=wb2(.*)")){ 
          int n1= trgurl.indexOf("target=wb2"); 
          String str1 = Integer.toString(n1+10); 
          System.out.println(n1+10); 
          System.out.println(trgurl.substring(0,n1+10)); 
          String find1= ""+trgurl.substring(0,n1+10); 
          System.out.println(find1); 
          // boolean cancel(); 
          wb2.load(find1); 
         } 
         } 
         } 
         }); 
         } 
         }); 






    wb1.load("url"); 
    // String url = "https://eclipse.org"; 
      // Load a page from remote url. 
      // webEngine.load(url); 

    vbox2.setPadding(new Insets(3)); 
    vbox2.setSpacing(3); 
    vbox2.getChildren().addAll(browser1,browser); 

    HBox.setHgrow(vbox2, Priority.ALWAYS); 


    hbox.setPadding(new Insets(20)); 
//  StackPane.setMargin(hbox, new Insets(20)); 

    hbox.getChildren().addAll(vbox, vbox2); 
    root.getChildren().add(hbox); 
    Scene scene = new Scene(root, 500, 300); // the stack pane is the root node 


    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

public static void main(String[] args) 
{ 
    Application.launch(args); 

} 
} 

通過使用platform.runlater()和聽者後取消由getloadworker.cancel()的loadworker