webview.loadURL 并不总是有效

问题描述 投票:0回答:2

我在 oncreate 和 onOptionsItemSelected 中有 webview 代码,它可以正常工作,如下所示。(这是我按要求工作的旧代码)

MainActivity.java

 @Override
protected void onCreate(Bundle savedInstanceState) 
{       mwebView = (WebView) findViewById(R.id.pdf_web_view);
        WebSettings settings = mwebView.getSettings();
        settings.setJavaScriptEnabled(true);
        mwebView.setWebChromeClient(new WebChromeClient());
        mwebView.loadUrl("file://" + getFilesDir() + "/index.html");
}



@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()) {

           case R.id.action_gotopage:

            LayoutInflater layoutInflater = LayoutInflater.from(this);
            View input_dialogView = layoutInflater.inflate(
                    R.layout.gotopage_dialogbox, null);
            final AlertDialog.Builder alert = new AlertDialog.Builder(this);
            alert.setTitle("Enter the page number");
            alert.setView(input_dialogView);

            final EditText input = (EditText) input_dialogView
                    .findViewById(R.id.pagenum_edit);

            input.requestFocus();
            input.setTextColor(Color.BLACK);

            alert.setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                            int whichButton) {
                            String pg_num = input.getText().toString();

                            if (pg_num.equals("")) {
                                input.setError("Page number Required");

                            } else {

                                mwebView.loadUrl("javascript:onGotoPage("
                                        + pg_num + ")");

                            }
                        }

                    });

            alert.setNegativeButton("CANCEL",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                            int whichButton) {

                        }
                    });

            // create an alert dialog
            AlertDialog alert1 = alert.create();

            alert1.show();

            return super.onOptionsItemSelected(item);

        default:
            return super.onOptionsItemSelected(item);
        }
      }

我想使用 ViewPager 将此代码转换为幻灯片页面。所以我有这样的代码(我的新代码):

MainActivity.java

public class Mainactivity extends AppCompatActivity {
    private  int NUM_PAGES=10;
    private ViewPager mPager;
    private PagerAdapter mPagerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pdf_webview);

    mPager = (ViewPager) findViewById(R.id.pdf_view_pager);
    mPagerAdapter = new 
    ScreenSlidePagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mPagerAdapter);
   }

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
    public ScreenSlidePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return new SlideFragment().create(position);
    }

    @Override
    public int getCount() {
        return NUM_PAGES;
    }
  }
}

SlideFragment.java

 public class SlideFragment extends Fragment {
    private static final String ARG_PAGE = "page";
    private int mPageNumber;
    private WebView mwebView;

    public static SlideFragment create(int pageNumber) {
        SlideFragment fragment = new SlideFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_PAGE, pageNumber);

        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mPageNumber = getArguments().getInt(ARG_PAGE);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
            ViewGroup rootView = (ViewGroup) inflater.inflate(
            R.layout.pdf_fragment_webview, container, false);

            mwebView = (WebView) findViewById(R.id.pdf_web_view);
            WebSettings settings = mwebView.getSettings();
            settings.setJavaScriptEnabled(true);
            mwebView.setWebChromeClient(new WebChromeClient());
            mwebView.loadUrl("file://" + getFilesDir() + "/index.html");
            mwebView.loadUrl("javascript:onGotoPage("
                                            + pg_num + ")");

      }
     }

webview.loadURL 仅第一次有效,第二次无效。但是当它在 onOptionsItemSelected 方法内部时,它工作正常。

我已经尝试了 WebView loadUrl 仅工作一次

中的所有解决方案

还尝试了 onPageFinished 和评估功能。

但在我的情况下没有一个起作用。我无法弄清楚出了什么问题。

android webview
2个回答
0
投票

我认为 html 页面加载和 javascript 函数运行之间存在竞争条件。

建议您首先加载 html 页面,然后在 onPageFinished 回调中运行 javascript。

另外,在 webview 上运行 javascript 代码时,应该使用 evaluateJavascript 方法。

希望这有帮助。


0
投票

就我而言,最简单、最有效的解决方案是在尝试加载网址之前停止任何加载:

webView.stopLoading();
webView.loadUrl(url);
© www.soinside.com 2019 - 2024. All rights reserved.