2013-06-30 20 views
6

Tôi đang phát triển một ứng dụng và cần chạy trình gỡ lỗi trên phần WebView/WebEngine của ứng dụng để tôi có thể gỡ lỗi ứng dụng của mình tốt hơn. Nhưng mã tôi tìm thấy trên internet để tiêm Firebug Lite không hoạt động vì một lý do nào đó.JAVAFX/WebView/WebEngine FireBugLite hoặc Một số trình gỡ lỗi khác?

Bản thân mã Javascript hoạt động tốt nếu tôi chạy nó trên Bàn điều khiển Firefox, nhưng không phải khi cùng một mã được thực hiện thông qua webview/webengine của JavaFX. Giao diện điều khiển netbeans không ném bất kỳ lỗi nào khác ... vì vậy tôi không chắc chắn tại sao giao diện người dùng FirebugLite không hiển thị/tải.

Điều gì có thể gây ra điều này, bất kỳ lựa chọn thay thế nào khác?

Tôi đang sử dụng JavaFX 2.2

// Không làm việc ....

webView.getEngine().executeScript("if (!document.getElementById('FirebugLite')){E = document['createElement' + 'NS'] && document.documentElement.namespaceURI;E = E ? document['createElement' + 'NS'](E, 'script') : document['createElement']('script');E['setAttribute']('id', 'FirebugLite');E['setAttribute']('src', 'https://getfirebug.com/' + 'firebug-lite.js' + '#startOpened');E['setAttribute']('FirebugLite', '4');(document['getElementsByTagName']('head')[0] || document['getElementsByTagName']('body')[0]).appendChild(E);E = new Image;E['setAttribute']('src', 'https://getfirebug.com/' + '#startOpened');}"); 
+0

Tôi đã trả lời cách sử dụng DevTools trên JavaFX WebView tại [link] (http://stackoverflow.com/a/34444807/1334241) –

Trả lời

16

tôi đã có thể khắc phục vấn đề. Có vẻ như phiên bản ổn định hiện tại của FirebugLite hoạt động tốt cho các trình duyệt truyền thống nhưng có điều gì đó khác biệt khiến cho ứng dụng đó không thể xem được bằng JAVAFX WebView.

tôi đã có thể để thêm Firebug để ứng dụng của tôi bằng cách sử dụng một phiên bản nén của FirebugLite

<script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script> 

Các giải pháp đến từ: Testing IE6 with Firebug Lite

+1

1.2 là phiên bản mới nhất của Firebug lite hoạt động với tôi với bootstrap.css, cũng trên các trình duyệt thông thường – ZiglioUK

+0

Tương tự với pure.css; 1,2 công trình, 1,3 và 1,4 thì không. – Norswap

+0

Wonderful ....... – repzero

2

tôi thấy với JavaFX Webview rằng cách tốt nhất để nhanh chóng gỡ lỗi javascript đã phải làm như sau:

webView.getEngine().setOnAlert(new EventHandler<WebEvent<String>>() { 
    @Override 
    public void handle(WebEvent<String> event) { 
     System.out.println(event.getData()); 
    } 
}); 

Đó ống qua tất cả alert("whatever"); miếng của bạn mã, do đó bạn có thể thấy những gì đang xảy ra.

14

Lệnh bạn đã cung cấp trong câu hỏi của mình phù hợp với tôi (chủ yếu là).

Có lẽ bạn không đợi cho đến khi WebView tải một tài liệu trước khi cố kích hoạt Firebug.

Ví dụ: mã sau đây sẽ khởi chạy Firebug Lite cho tôi (JavaFX 8b103, OS X 10.8).

import javafx.application.Application; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.scene.Scene; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 
import javafx.stage.Stage; 
import org.w3c.dom.Document; 

public class WebViewWithDebugger extends Application { 
    public static void main(String[] args) { launch(args); } 
    @Override public void start(Stage primaryStage) { 
    final WebView webView = new WebView(); 
    final WebEngine engine = webView.getEngine(); 
    engine.load("http://docs.oracle.com/javafx/2/get_started/animation.htm"); 
    engine.documentProperty().addListener(new ChangeListener<Document>() { 
     @Override public void changed(ObservableValue<? extends Document> prop, Document oldDoc, Document newDoc) { 
     enableFirebug(engine); 
     } 
    }); 
    primaryStage.setScene(new Scene(webView)); 
    primaryStage.show(); 
    } 

    /** 
    * Enables Firebug Lite for debugging a webEngine. 
    * @param engine the webEngine for which debugging is to be enabled. 
    */ 
    private static void enableFirebug(final WebEngine engine) { 
    engine.executeScript("if (!document.getElementById('FirebugLite')){E = document['createElement' + 'NS'] && document.documentElement.namespaceURI;E = E ? document['createElement' + 'NS'](E, 'script') : document['createElement']('script');E['setAttribute']('id', 'FirebugLite');E['setAttribute']('src', 'https://getfirebug.com/' + 'firebug-lite.js' + '#startOpened');E['setAttribute']('FirebugLite', '4');(document['getElementsByTagName']('head')[0] || document['getElementsByTagName']('body')[0]).appendChild(E);E = new Image;E['setAttribute']('src', 'https://getfirebug.com/' + '#startOpened');}"); 
    } 
} 

debugging

Firebug Lite bản thân dường như không đặc biệt lớn tại gỡ lỗi trang web (ít nhất là dưới WebView cho tôi). Bảng điều khiển, html, css và bảng điều khiển dom dường như là tốt, cũng như tùy chọn kiểm tra. Vì vậy, một số thông tin hữu ích ở đó. Phần kịch bản cho thấy các kịch bản nhưng tôi không thấy anyway để thiết lập các điểm ngắt, đồng hồ, vv trong các kịch bản lệnh.

+0

Cuối cùng, nhờ lời khuyên của bạn về việc thêm ChangeListener! Vì vậy, nhiều ví dụ khác ra khỏi đó rời khỏi phần đó. Thật đáng ngạc nhiên là câu trả lời này không có nhiều hỗ trợ. – Splaktar

+4

Đã thử giải pháp trên với JavaFX - đã làm việc với các url được tải bên ngoài, nhưng không phải các url được tải từ các tệp cục bộ. Đối với những tệp đó, tôi phải thêm tệp này vào tệp html cục bộ: ' ' –

+0

@DavemM cảm ơn bạn đã nhận xét hữu ích của bạn. Giải quyết vấn đề của tôi! – schlimpf

Các vấn đề liên quan