Điều tôi muốn làm là thay thế một số phần của nội dung trang web HTML (hiện đang được tải bên trong công cụ WebView) với nội dung HTML của riêng tôi.Thay thế một phần nội dung WebView khi đang tải
Ví dụ đơn giản - tôi muốn thay thế màu nền của từng trang đã tải thành ĐỎ. Có nghĩa là tôi sẽ cần thêm hoặc thay thế thuộc tính bgcolor body hiện tại bằng giá trị của riêng tôi. Tôi nên làm gì để đạt được điều đó?
Đây là mã trình duyệt cơ bản dựa trên JavaFX phần WebView:
public class BrowserTest extends Application
{
public static void main (String[] args)
{
launch (args);
}
public void start (Stage stage)
{
stage.setTitle ("WebView");
Browser browser = new Browser();
browser.load ("http://google.com");
Scene scene = new Scene (browser);
stage.setScene (scene);
stage.show();
}
public class Browser extends Region
{
final WebView browser;
final WebEngine webEngine;
public Browser()
{
super();
browser = new WebView();
webEngine = browser.getEngine();
getChildren().add (browser);
}
public void load (String url)
{
webEngine.load (url);
}
private Node createSpacer()
{
Region spacer = new Region();
HBox.setHgrow (spacer, Priority.ALWAYS);
return spacer;
}
protected void layoutChildren()
{
double w = getWidth();
double h = getHeight();
layoutInArea (browser, 0, 0, w, h, 0, HPos.CENTER, VPos.CENTER);
}
protected double computePrefWidth (double height)
{
return 750;
}
protected double computePrefHeight (double width)
{
return 500;
}
}
}
Có một ví dụ tốt về kỹ thuật này trong một số tài liệu Oracle nhưng vì JavaFX ngoái và cập nhật trang web của tôi không thể tìm thấy nó ở tất cả . Có lẽ bất cứ ai có liên kết đến tài liệu cũ ...
Lưu ý: Cũng jewelsea cung cấp một cách tốt để làm hậu thay đổi (khi trang web được tải), nhưng tôi cần phải chính xác "tải trong khi" giải pháp cho trường hợp của tôi, do đó WebView sẽ không làm hai trang kết xuất công việc hai lần (trước và sau khi thay đổi).
Cảm ơn ý tưởng về các thay đổi trong tài liệu WebEngine - nó hoạt động. Nhưng tôi vẫn đang tìm kiếm một giải pháp hơi khác. Để sửa đổi tài liệu tôi cần phải đợi cho tải của nó đầu tiên và WebView sẽ làm cho tài liệu được nạp ít nhất một lần. Nhưng tôi muốn chặn tải tài liệu và sửa đổi dữ liệu đến để kết quả hiển thị WebView đầu tiên sẽ là kết quả cuối cùng. Tôi thậm chí không cần bất kỳ cây DOM được phân tích cú pháp nào để làm việc - nó sẽ tốt hơn để làm việc với nội dung HTML (văn bản) đơn giản vì tôi có các công cụ khác để phân tích cú pháp và sửa đổi nội dung HTML. –
Thêm vào ý tưởng trên: bạn có thể giả mạo WebView cho đến khi nó được thực hiện hiển thị lần thứ hai. Điều này sẽ không khắc phục được "hiển thị kép", nhưng sẽ ngăn người dùng xem thông tin đầu tiên – miniBill
Thêm thông tin để trả lời về chặn và có khả năng sửa đổi luồng được tải vào một WebView. – jewelsea