#android #ios #webview #nativescript
Вопрос:
Я хочу использовать WebView NativeScript для предварительной обработки некоторых моих данных (он использует XHTML, поэтому я должен использовать WebView и метод evaluateJavascript).
Но для предварительного процесса я не хочу отображать все веб-представление всего за мгновение ока, поэтому я создал службу, которая создает new WebView()
экземпляр. Теперь я могу установить атрибут src таким образом и все остальные, такие как высота и с, но если я хочу вызвать функцию evaluateJavascript, я не могу. Код ниже.
test() { //create new webview instance this.wv = new WebView(); //all of this works this.wv.set('height', 100); this.wv.setProperty('width', 200); this.wv.setProperty('src', 'some url here'); //this does not work this.wv.android.evaluateJavascript( 'function test(){ return 1;} test();', new android.webkit.ValueCallback({ onReceiveValue: function (res: any) { console.log(res); } }) ); }
Методы set и setProperty хороши, но evaluateJavascript
говорится, что они не могут быть вызваны для неопределенных.
console.log(this.wv.android); //undefined
Также событие WebView loaded не запускается, если в приведенной выше тестовой функции есть что-то подобное.
this.wv.on('loadFinished', (data) =gt; { console.log('loadFinished'); console.dir(data); });
С другой стороны, если я создам компонент, помещу в него элемент WebView, чем буду прослушивать событие loadFinished, я смогу запустить JS, как показано выше, вот так:
webViewLoaded(webargs) { // console.log('WEBVIEW LOADED'); this.webView = webargs.object; this.webVie.android.evaluateJavascript( 'function test(){ return 1;} test();', new android.webkit.ValueCallback({ onReceiveValue: function (res: any) { console.log(res); } }) ); } //It run properly. }
So my questions are:
Am I right and the loadFinished event does not run on the creation of new WebView() instance? If it does run, how can I add a listener to it?
В чем разница между экземпляром new WebView() и объектом, возвращенным в приведенном выше параметре args? И почему этот.wv.android не определен в приведенной выше тестовой функции?
Могу ли я запустить evaluateJavascript в экземпляре WebView, который не имеет никакого HTML-аналога и даже не отображается? Если да, то как?
Обязан ли я визуализировать веб-представление, чтобы правильно его использовать?