Меня интересует этот фрагмент кода, который я использую:
WebView webView = new WebView();
JSObject jsobj;
webEngine = webView.getEngine();
try {
webEngine.load(getClass().getResource("index.html").toExternalForm());
} catch (Exception e) {
e.printStackTrace();
}
try {
jsobj = (JSObject) webEngine.executeScript("window");
jsobj.setMember("java", new DataModel());
} catch (Exception e) {
e.printStackTrace()
}
Эта строка webEngine.load(getClass().getResource("index.html").toExternalForm());
загружает мой index.html
в файл WebView
. Поскольку это одностраничное приложение, это все, что мне нужно, и вопросов по нему больше нет.
Теперь вернемся к вопросу в заголовке:
Это строка: jsobj = (JSObject) webEngine.executeScript("window");
установить ссылку JSObject
на "объект окна", как это определено w3school?
Означает ли это, что jsobj
теперь равно объекту окна, который представляет открытое окно в браузере?
Если да: может ли это быть причиной того, что мое приложение выиграло? не работает, если я использую «обновить страницу» в контекстном меню в WebView
, так как это сгенерирует новый window object
?
Дополнительный вопрос: в моем JavaScript я могу получить доступ к модели, используя java.methodName();
is "java" здесь идентификатор или как бы мне это назвать? Это не совсем экземпляр, поэтому я бы не стал так его называть.
Редактировать: Это мой класс Java:
public class DataModel{
public void alert(String msg) {
System.out.println(msg);
}
}
Из моего JavaScript, встроенного в index.html
, я могу вызвать java.alert("hello world");
для печати hello world
. Поскольку я передаю ссылку на модель в window object
, каждая функция в моем JavaScript имеет доступ к DataModel.class
. С точки зрения JavaScript: это «java». идентификатор, ссылка, экземпляр, ...?