私はいくつかのHTML5/javascriptファイルをサーバー上でホストしています。 HTML5ページでボタンがクリックされると、javascript関数が呼び出されます。私は、関数が呼び出されたときにリッスンし、その関数が返すjsonを取得します。以前はデバイスのポートを開いていましたが、Android 3.0では動作しません。私は外部インターフェイスを使用してJavaScript呼び出しを聞くことができると聞いたことがありますが、それを実装する方法はわかりません。javaからのjavascript関数の呼び出しを聞く - Android
答えて
外部インターフェイスを使用するには、WebViewでサイトを実行する必要があります。また、以下のソリューションを使用すると、
- 、暗示します。
インターフェイスを登録するには、WebView
インスタンスでaddJavascriptInterfaceメソッドを呼び出す必要があります。その名前を選択して実装を作成する必要があります。あなたのインターフェイスはBinding JavaScript
class FunctionCallInterceptor {
public void reportCall(String functionName, String result) {
// some code, handling interception
}
}
して登録...
mWebView.addJavascriptInterface(new FunctionCallInterceptor(), 'Interceptor');
必要があります
次に、関数結果をインターフェースに転送する必要があります。ここにはJavaScriptコードが必要です。このコード
wrapFunc('myFunction'); // wraps myFunction in the source
はまた、外部のページにこのコードを埋め込む方法をすると、すべての
mWebView.getSettings().setJavaScriptEnabled(true);
でJavaScriptを有効にすることを忘れないでください、あなたの関数の使用をラップする
function wrapFunc(name) {
if(typeof window[name] == 'function') { // If target is accessible
var original = window['__' + name] = window[name]; // remember original one
window[name] = function() { // and replace with wrapper
var result = original.apply(this, arguments); // call original
Interceptor.reportCall(name, result.toString()); // report to interceptor
return result; // return result as usual
}
}
}
(私は、あなたが外部JSコードにアクセスしていないことを暗示しています)...ページコンテキストで任意のコードを実行するには、WebView
mWebView.loadUrl('javascript:some... js... code...');
これはページのリロードを開始せず、JavaScriptのみが実行されます。ページが完全に読み込まれた後でこれを実行する必要があることに注意してください。あなたは以下のコードでこれを入手することができます
mWebView.setWebViewClient(new WebViewClient {
@Override
public void onPageFinished (WebView view, String url) {
// here page is loaded
}
});
詳細
ためsetWebViewClientとonPageFinishedを参照してくださいにも改行を含めることはできませんloadUrl
呼び出しを介してページに転送どのようなコード、、、注意してください。だからあなたはそれらを取り除く必要があります(String.replaceなど)。
だから を追加し、最終的な解決策は以下のとおりです。
String wrapFuncCode = "function wrapFunc ...... "; // or maybe place it in resources?
mWebView.addJavascriptInterface(new FunctionCallInterceptor(), 'Interceptor');
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient {
@Override
public void onPageFinished (WebView view, String url) {
// inject wrapper
// don't forget to remove newline chars
mWebView.loadUrl("javascript:" + wrapFuncCode.replace('\n', ''));
// wrap all the functions needed
String[] funcToWrap = new String[] { 'myFunc1', ... };
for(String f : funcToWrap) {
mWebView.loadUrl("javascript:wrapFunc('" + f + "myFunction');");
}
}
});
こんにちは、この関数wrapFunc(name){ if(typeof window [name] == 'function'){//ターゲットにアクセス可能であればもっと詳しく説明できます var original = window ['__' + name] =ウィンドウ[名前]; //元のものを記憶する ウィンドウ[名前] = function(){//ラッパーで置き換える var result = original.apply(this、arguments); //元の呼び出し Interceptor.reportCall(name、result.toString()); //インターセプタに報告する return result; //結果を通常どおり返す } } }とwrapFunction( 'myFunction');このコードを追加する場所はどこですか? – Vibhuti
はい...私はwebviewで私のページを実行しています。私は傍受したい機能名を知っています。はい、jsコードの公開範囲にあります。 – Vibhuti
私は完全なソリューションを追加しました。事がもっと明確にならない場合は、具体的な質問をお願いします。 – Olegas
- 1. Javascript関数呼び出しを聞く - Android
- 2. Android WebViewのJavaScriptからJava関数を呼び出す
- 3. 引数からjavaからjavascript関数を呼び出す
- 4. JavaメソッドをJavaScript関数内から呼び出しますか?
- 5. JavaからUnity関数を呼び出してください。
- 6. Java GWTコードから.jsファイルのJavascript関数を呼び出す
- 7. コードラインのトレース/ JavaScriptからの関数呼び出しの呼び出し
- 8. 関数名からのJavascript呼び出し関数
- 9. 外部関数からのJavascript即値関数呼び出し
- 10. JavaアプレットからJavascript関数を呼び出す
- 11. 呼び出された関数から(元の関数で)javascript関数を呼び出していますか?
- 12. cordovaのtimer関数内からjavascript関数を呼び出す
- 13. JavaからAndroidのWebViewでjQuery関数を呼び出しますか?
- 14. ブラウザの外からJavascript関数を呼び出しますか?
- 15. URLでJavascriptの関数呼び出しを呼び出す
- 16. AndroidのJavaScript関数をwebviewなしのパラメータで呼び出す
- 17. Java PreparedStatementのフィールドから関数を呼び出しますか?
- 18. Javaクラスからいくつかのjavascriptメソッドを呼び出す
- 19. 関数呼び出しから関数呼び出し名を抽出する
- 20. javascriptカスタムイベントファイヤーを返す関数からの呼び出し
- 21. GroovyからJava関数呼び出しへのコールバックを提供
- 22. HTMLテーブルのセルからのJavascript関数呼び出し
- 23. MSCRM 2016ターボフォームのSilverlightからのJavascript関数呼び出し
- 24. javascript関数呼び出しの問題
- 25. ASP.NET JavaScript関数呼び出しのコードビハインド
- 26. javascript関数の呼び出し方法
- 27. JavaScript関数の呼び出し
- 28. Javascript addEventListener関数の呼び出し
- 29. JavaScript APIの呼び出し関数
- 30. javascript関数の呼び出しタイミング
WebViewでページを実行していますか? – Olegas