私は、webview を備えた android プロジェクトを持っています。この webview は、資産フォルダーに保存されている静的な html ファイルを読み込みます。また、私の資産フォルダーには、サードパーティの JavaScript ライブラリ (rangy) があります。私のhtmlファイルの先頭にあるスクリプトタグにJavaScriptがいくつかあります。その JavaScript は、rangy ライブラリのメソッドとオブジェクトを参照します。スクリプトタグを使用して、HTMLファイルに範囲を参照させています。関数とメソッドを使用しようとすると、次のエラーが表示されます。
Cannot call method '[any method from rangy library]' of
undefined
関連するコードのスニペットを次に示します。
これは私がrangyを含める場所です:
<html lang="en">
<head>
<title> </title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script type="text/javascript" src="rangy.js"></script>
<script type="text/javascript" src="rangy-serializer.js"></script>
<script type="text/javascript">
//...My native js
</script>
</head>
これは、さまざまなライブラリの非常に広範なストロークです。この投稿には、私の質問に関連していると思われるライブラリの部分のみを含めています。
window['rangy'] = (function() {
//This is all the code for rangy
});
これは、rangy を参照するネイティブ js の一部です。Android WebView はデフォルトでこの情報を提供しないため、最後の catch ブロックは html ドキュメントの本文にエラーを出力します。
jsHandler.restoreSelection = function(selectionDetails) {
try{
window.document.body.style.background="yellow";
window.rangy.deserializeSelection(decodeURIComponent(selectionDetails.replace(/\s+$/, "")));
window.document.body.style.background="green";
}
catch(err){
window.document.body.innerHTML = err.message;
}
};
アプリに jsHandler.restoreSelection() 関数を起動するボタンがあります。そのボタンを押すと、背景が白から黄色に変わりますが、コマンドは例外をキャッチし、本文を一番上に投稿したエラー メッセージに置き換えます。アプリのセットアップの何が問題になっていますか? 私の資産フォルダにあるhtmlファイルから外部jsファイルを参照する適切な方法は何ですか? (注:私はjavascriptをオンにしています)。
ありがとうございます!