android javascript在第一次加载时不工作

android javascript在第一次加载时不工作,android,android-asynctask,Android,Android Asynctask,我正在向webview添加内容,然后在页面上运行一些javascript。脚本确实可以工作,但在我第一次加载webview时它就不工作了。如果我第一次在应用程序中加载webview,它不会更改内容。第二次加载webview(即返回,然后单击同一列表项)时,javascript将工作并为我更改内容 这是我的设置,在AsyncTask的onPostExecute中,javascript在第一次加载时不工作,但在第二次加载时工作 在onCreateView中 WebSettings webSettin

我正在向webview添加内容,然后在页面上运行一些javascript。脚本确实可以工作,但在我第一次加载webview时它就不工作了。如果我第一次在应用程序中加载webview,它不会更改内容。第二次加载webview(即返回,然后单击同一列表项)时,javascript将工作并为我更改内容

这是我的设置,在AsyncTask的onPostExecute中,javascript在第一次加载时不工作,但在第二次加载时工作

在onCreateView中

WebSettings webSettings = mWebView.getSettings();

webSettings.setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewFragmentClient());
mMainLayout.setBackgroundColor(MainActivity.mSettings.isNightMode() ? Color.DKGRAY : Color.WHITE);
private class WebViewFragmentClient extends WebViewClient {

    @Override
    public void onPageFinished(WebView view, String url) {
        // Page is loaded update the contents textsize and mode and set it visible
        view.loadUrl(String.format("javascript:(document.body.className = '%s');", MainActivity.mSettings.isNightMode() ? "night" : "day"));
        view.loadUrl(String.format("javascript:(document.body.style.fontSize ='%spt');", MainActivity.mSettings.getTextSize()));
        view.setVisibility(View.VISIBLE);

        super.onPageFinished(view, url);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {         
        return mCallBack.pageLinkSelected(url);
    }
}
WebViewClient捕获页面加载完成,然后运行JS并显示视图

WebSettings webSettings = mWebView.getSettings();

webSettings.setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewFragmentClient());
mMainLayout.setBackgroundColor(MainActivity.mSettings.isNightMode() ? Color.DKGRAY : Color.WHITE);
private class WebViewFragmentClient extends WebViewClient {

    @Override
    public void onPageFinished(WebView view, String url) {
        // Page is loaded update the contents textsize and mode and set it visible
        view.loadUrl(String.format("javascript:(document.body.className = '%s');", MainActivity.mSettings.isNightMode() ? "night" : "day"));
        view.loadUrl(String.format("javascript:(document.body.style.fontSize ='%spt');", MainActivity.mSettings.getTextSize()));
        view.setVisibility(View.VISIBLE);

        super.onPageFinished(view, url);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {         
        return mCallBack.pageLinkSelected(url);
    }
}
异步加载数据

private class AsyncLoadContent extends AsyncTask<Void, Void, Void> {
    String mContent;

    @Override
    protected void onPreExecute() {
        mWebView.setVisibility(View.INVISIBLE);
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        // Set the content of the page
        mContent = mCallBack.getContent();
        return null;
    }

    @Override
    protected void onPostExecute(Void result)
    {
        mWebView.loadDataWithBaseURL("file:///android_asset/", mContent, "text/html", "utf-8", null);
    }
}
私有类AsyncLoadContent扩展了AsyncTask{
字符串内容;
@凌驾
受保护的void onPreExecute(){
mWebView.setVisibility(视图.不可见);
super.onPreExecute();
}
@凌驾
受保护的Void doInBackground(Void…参数){
//设置页面的内容
mContent=mCallBack.getContent();
返回null;
}
@凌驾
受保护的void onPostExecute(void结果)
{
mWebView.loadDataWithBaseURL(“file:///android_asset/,mContent,“text/html”,“utf-8”,null);
}
}
谢谢,
DMan不使用AsyncTask,WebView自行处理页面加载。loadDataWithBaseURL是异步方法,并立即返回。用于侦听页面加载是否已完成。

我正在使用异步任务,因为内容创建相对繁重,我不想在此期间冻结UI。脚本仍然会在任何内容的后续加载上运行,那么为什么异步任务会把事情搞砸呢?捕获load completion事件的方法是什么?进行了更改以反映您所说的内容,它似乎工作得很好。问题中的代码已更新,非常感谢。由于内容确实是异步加载的,因此同步似乎已关闭。谢谢