禁用在JavaFX WebEngine中加载图像
我搜索了所有地方,但没有找到任何方法禁用JavaWebEngine加载图像 已完成的研究:禁用在JavaFX WebEngine中加载图像,java,javafx,javafx-webengine,Java,Javafx,Javafx Webengine,我搜索了所有地方,但没有找到任何方法禁用JavaWebEngine加载图像 已完成的研究: 我找到了一些想法,比如使用URL.setURLStreamHandlerFactory()来使用我自己的URLStreamHandler,并让它分析URL,只返回URLConnections,返回不以.jpg.png结尾的URL等。但这有很多问题:有时图像URL不以.jpg结尾,如果它是动态图像,比如验证码。那么,我怎样才能禁用从WebEngine自动加载图像呢?我不是JSoup专家,但这样做应该很容易
我找到了一些想法,比如使用
URL.setURLStreamHandlerFactory()
来使用我自己的URLStreamHandler
,并让它分析URL,只返回URLConnection
s,返回不以.jpg.png结尾的URL等。但这有很多问题:有时图像URL不以.jpg结尾,如果它是动态图像,比如验证码。那么,我怎样才能禁用从WebEngine自动加载图像呢?我不是JSoup专家,但这样做应该很容易
import java.net.URL;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class NoImg extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
WebView wv = new WebView();
WebEngine we = wv.getEngine();
Document doc = Jsoup.parse(new URL("http://www.google.com"), 5000);
doc.select("img").stream().forEach((element) -> {
element.remove();
});
we.loadContent(doc.outerHtml());
Scene scene = new Scene(wv, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
它似乎工作得很好。您需要考虑将“Research done:”移动到一个答案是的,但有时页面在操作DOM时需要大量javascript,例如,如果我选择某个组合框,则通过页面javascript在DOM中启用某个文本字段,因此使用WebEngine.load()是必需的,因为它在操作dom、填写表单等时处理所有javascript处理,而我认为jsoup不会这样做,它只会将基本html解析为dom,而在操作dom时会处理未来的js处理。此外,图像有时会插入img标记,例如使用样式背景图像。