2013-11-23 2 views
5

Может ли кто-нибудь дать некоторые рекомендации о том, как загрузить следующее в webviewer из loadContent()?Как загрузить оба html и javascript в webengine из loadContent()?

http://jsbin.com/aqupun/6/edit

Я пытался сделать что-то вроде этого, но это не похоже на работу. Благодаря!

Scanner sc1 = new Scanner(new File("src/web/web.html")); 
    String webStr = sc1.useDelimiter("\\Z").next(); 

    Scanner sc2 = new Scanner(new File("src/web/data.js")); 
    String dataStr = sc2.useDelimiter("\\Z").next(); 

    Scanner sc3 = new Scanner(new File("src/web/cytoscape.min.js")); 
    String cytoStr = sc3.useDelimiter("\\Z").next(); 

    Scanner sc4 = new Scanner(new File("src/web/jquery.min.js")); 
    String jqueryStr = sc4.useDelimiter("\\Z").next(); 

    webEngine.loadContent(cytoStr, "text/javascript"); 
    webEngine.loadContent(jqueryStr, "text/javascript"); 
    webEngine.loadContent(dataStr, "text/javascript"); 
    webEngine.loadContent(webStr, "text/html"); 
+0

Не могли бы вы уточнить, что * не работает * означает? =) –

+0

В конечном итоге работает; но у вас не может быть ЛЮБОЙ странности. Нет никакого журнала, который я могу обнаружить и не знаю, как мы собираемся выталкивать и вызывать значения статуса от двигателя (пока). Просто продолжайте. – will

ответ

1

Вам просто нужно загрузить страницу HTML с помощью load() метод WebEngine. Загрузка связанных CSS и JavaScript будет сделана для вас WebEngine.

Вот как я загрузил AceEditor в WebView:

enter image description here

и код, чтобы сделать это было только из двух линий:

engine = webView.getEngine(); 
engine.load("file:///home/littlejavachild/Downloads/AceEditor/ace-builds-master/MyTry.html"); 

Загрузка источника JavaScript и CSS обрабатывается для меня двигателем.

Документы для метода здесь:

public void load(java.lang.String url) 

загружает веб-страницу в этот двигатель. Этот метод запускается асинхронно Загрузка и возврат немедленно.

Параметры: URL - URL веб-страницы, чтобы загрузить

+0

Привет, спасибо за ваш ответ. Это тоже будет работать, но у меня есть страница, динамически обновляемая, поэтому я хочу сохранить ее в памяти, а не сохранять ее на жесткий диск, чтобы загрузить ее. – user2799603

+0

просто укажите URL-адрес. Попробуйте открыть свою учетную запись facebook с веб-просмотра. Он будет работать как настоящий браузер ... нет проблем –

3

вам сначала нужно поместить эти три файла на ресурсы на том же уровне или на жестком диске.

Чтобы загрузить содержимое непосредственно из памяти можно использовать

webView.getEngine().loadContent("your html") 

От JavaDoc:

public void loadContent(String content)

Нагрузка данного содержания непосредственно. Этот метод полезен , если у вас есть контент, составленный в памяти или загруженный из некоторой системы , которой невозможно достичь через URL-адрес.

Следует помнить, что связанные ресурсы должны быть доступны по их URL-адресам, то есть на диске или в ресурсах. Чтобы отразить динамические изменения в вашем веб-приложении, я предлагаю вам вызвать Java из JS. Это можно сделать, предоставив Java-объект в приложение JS: Communication between JavaFX and JavaScript inside WebView, using JSObject

Здесь вы можете найти демонстрацию браузера и упрощенный компонент WebView: Java GUI to display webpages and return HTML.

3

Я только что узнал, что с помощью <base> тега в HTML также делает трюк:

<html> 
    <head> 
     <title>The slash at the end of the href is important!</title> 
     <base href="file:///absolute/path/to/your/docroot/" /> 
    </head> 
    <body> 
     <img src="image.png"/> 
    </body> 
</html> 

При загрузке выше кода через engine.loadContent(String) затем image.png будет загружен из /absolute/path/to/your/docroot/image.png.

Этот метод проще, если вам нужно загрузить несколько ресурсов, поскольку вам нужно указать абсолютный путь в одном месте.

Это тестирование было выполнено с помощью WebView Java 8u25.

+0

Это звучит как глупый вопрос (_but_) ... что такое ** docroot **, когда я загружаю String - ** .. load (someText, " text/html ") **, я не уверен, что это глупый вопрос. Я отметил, что с загрузкой (URI) версия, сокет открывается и _volia_, все работает. Кто-нибудь сталкивался с советом от проекта Web Kit? – will

+0

@ будет, если вы спросите, что означает * [base] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base) *, если вы используете [loadContent] (https : //docs.oracle.com/javase/8/javafx/api/javafx/scene/web/WebEngine.html#loadContent-java.lang.String-java.lang.String-), ответ кажется «нулевым» '. Это то, что я получаю, когда я делаю ' ' –

+1

Чтобы загрузить относительные ресурсы (указанные в HTML), при использовании [loadContent] (https://docs.oracle.com/javase/8/javafx/api/javafx/scene/web/WebEngine.html#loadContent -java.lang.String-java.lang.String-), кажется, что '' '' href' необходимо установить в HTML перед загрузкой. –

Смежные вопросы