これは可能な解決策です。
WebViewに表示されているページにフロントエンドのJavascriptコードを追加します。そのJavascriptを使用してページのタップを検出し、タップしたときにWebViewを新しい(偽の)ページにリダイレクトします。 NativeScript側では、WebViewのloadStartedEvent
(WebViewがナビゲートすると起動します)を聞き、WebViewがその新しい偽のページに移動しようとするときに何かをします。
私は次のようになります。
ブラウザ/ WebViewコードです。 click
イベントのイベントリスナーを追加します(おそらくこれをtap
イベントに変更します)。クリックすると、ユーザーはnativescript://{X coordinate}/{Y coordinate}
にナビゲートされます。それが始まるURLにナビゲートするかどうNativeScript側のその後
window.addEventListener('click', function(event){
window.location.href='nativescript://' + event.screenX + '/' + event.screenY;
})
は、WebViewのがナビゲートされたときのリスニングイベントリスナーを設定し、「nativescript://」をロードするイベントを停止してから座標を抽出しますURL。
var wv = new webViewModule.WebView();
wv.on(webViewModule.WebView.loadStartedEvent, function(event) {
// Check if the WebView is trying to navigate to 'nativescript://...'
if (event.url.indexOf('nativescript://') === 0) {
// Stop the loading event
if (ios) {
event.object.ios.stopLoading();
} else if (android) {
event.object.android.stopLoading();
}
// Do something depending on the coordinates in the URL
var coords = event.url.split('/');
coords.splice(0, 2);
console.log(coords[0] + ' - ' + coords[1])
}
});
ローカルファイルをロードするには、ローカルファイルへのパスをfile://
にするだけです。例えば。
var linkPath = fs.path.join(fs.knownFolders.currentApp().path, 'localHTMLFiles') + '/myFile.html';
var link = '<a href="file://" + linkPath + ">"'
これは100%ではありませんが、ジェスチャーはウェブビューでは機能しません。あなたはwebviewの内部でしか動かすことができません。そのWebviewでクライアントサイトを制御すると、Webサイトでclickイベントを処理できますが、もっと考えてみると、ジェスチャはネイティブでは実行できないと自信が持てますウェブビュー内のアプリ。 webviewは、それらのイベントを公開しない独自のコンテナです。私は間違っているかもしれませんが、私は思っていません:) –