Abi Abi - 26 days ago 7
Android Question

E/Web Console(8272): Uncaught ReferenceError: functionName is not defined:1 while loading webviews in a View Pager

I am trying to load webviews in a view pager.

public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = null;
v = inflater.inflate(R.layout.webview_layout, container, false);
myWebView = (WebView)v.findViewById(R.id.webview1);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAppCacheEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
myWebView.loadUrl("file:///android_asset/web/index.html");
myWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
myWebView.loadUrl("javascript:testFunction()");
}
}
}


After loading the page, a javascript function is called in
onPageFinished()

While scrolling at normal speed the webpages are loading and the javascript is executed.

But while scrolling at high speed the following exception is occured.

> 09-06 14:29:06.750: E/Web Console(8272): Uncaught ReferenceError:
> testFunction is not defined:1


testFunction() is

function testFunction(){
console.log("TestFuntion");
}


Please help...

Abi Abi
Answer

I had a fix on this

just set webChromeClient and catch the error and reload the page...

    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            isLoading = true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            myWebView.loadUrl("javascript:testFunction()");
        }
    });

    myWebView.setWebChromeClient(new WebChromeClient() {
        @Override
        public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
            MessageLevel level = consoleMessage.messageLevel();
            if(level.ordinal() == 3) { // Error ordinal
                if(loading) {
                    myWebView.stopLoading();
                    myWebView.loadUrl(AppConstants.ARTICLE_PAGE_URL);
                }
            }
        }
        return false;
    }