6

私はウェブビューを持っています

WebView wv;
wv = (WebView)findViewById(R.id.webView1);
wv.loadUrl("http://example.com/");

簡単に言った。

で:

onPageFinished

私は持っている:

wv.loadUrl("javascript:(function() { " + "document.getElementsByClassName('centered leaderboard_container')[0].style.display = 'none'; " + "document.getElementsByClassName('n')[0].style.display = 'none'; " + "document.getElementsByClassName('paginator')[0].style.display = 'none'; " + "document.getElementsByTagName('ul')[0].style.display = 'none'; " + "document.getElementsByTagName('tr')[0].style.display = 'none'; " + "})()");

WebView の可視性を INVISIBLE に設定しました

JavaScript が完了した後、可視性を VISIBLE に設定するにはどうすればよいですか?

これで、ページ全体が一瞬表示され、JavaScript が完了します。

誰?

ps。このウェブサイトは私のものではなく、サードパーティのウェブサイトです

4

2 に答える 2

15

API 17 エミュレーターでテストされ、動作します。

Java から Web に JavaScript を注入できます。

逆に、URL が読み込まれたら、javascript から Java コードの関数を呼び出し、setVisibility(). そのために、JS インターフェイスを追加します。

ここにコード:

private final static String HOST = "stackoverflow.com";
private WebView wb;

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_home);
    wb = (WebView) findViewById(R.id.home_webview);
    //Make the webview invisible
    wb.setVisibility(View.INVISIBLE);
    WebSettings webSettings = wb.getSettings();
    webSettings.setJavaScriptEnabled(true);
    wb.setWebViewClient(new WebViewClient(){
        public void onPageFinished(WebView view, String url){
            //Inject javascript code to the url given
            //Not display the element
            wb.loadUrl("javascript:(function(){"+"document.getElementById('Id').style.display ='none';"+"})()");
            //Call to a function defined on my myJavaScriptInterface 
            wb.loadUrl("javascript: window.CallToAnAndroidFunction.setVisible()");
        }           
    });

    //Add a JavaScriptInterface, so I can make calls from the web to Java methods
    wb.addJavascriptInterface(new myJavaScriptInterface(), "CallToAnAndroidFunction");
    wb.loadUrl("http://"+HOST);
}

 public class myJavaScriptInterface {
     @JavascriptInterface
     public void setVisible(){
         runOnUiThread(new Runnable() {

            @Override
            public void run() {
                wb.setVisibility(View.VISIBLE);                 
            }
        });
     }

 }

この機能は、すべてのページに対して実行されます。サードパーティのサーバーにアクセスしたら、すべてのリクエストをどう処理するかを管理する必要がありwebClient.shouldOverrideUrlLoading()ます。

更新された回答:

あなたがコメントしたように、私たちが行うべき最後のバージョンのためにそれを再現することができました:

Android 4.2 以降では、ホストされている JavaScript からアクセスできるようにするには、パブリック メソッドに @JavascriptInterface で明示的にアノテーションを付ける必要があります。これも、アプリの minSdkVersion または targetSdkVersion を 17 以上に設定した場合にのみ有効になることに注意してください。

追加してインポートしましたandroid.webkit.JavascriptInterface

参照: WebViews の JavascriptInterface メソッドに注釈を付ける必要があります

于 2013-05-06T12:39:17.767 に答える