2011-09-04 112 views
-1

所以基本上我有一个webview显示一个HTML/PHP页面,我想要做的是这个webview不显示或不加载页面的某个部分或HTML'div'被命名'xgDock'作为'div'在webview中无法正确显示,对于我的应用程序来说是不必要的。WebView内容

非常感谢您的时间和感谢。

回答

0

您有几种可能性:

  • 您可以更新网站: 您添加额外的paremeter您的要求,即:noxgdock 您如果存在检查您的PHP页面..在这个参数上,你不要添加它。 像这样,你不需要加载这个div。

  • 不能更新网站:它装载了这样的事情之后 可以删除DIV:

    webView.loadUrl( “JavaScript的:(函数(){” +“ELEM =文件.getElementByName('xgDock'); if(elem){elem.style.display ='none;';})()“);

或者你load the page,删除div,并且只在之后加载它。 (但它可以是痛苦的,如果你有authentifications,饼干,...)

1

这是我的WebView fragment.java

public class WebviewFragment extends Fragment implements BackPressFragment { 

//Static 
public static final String HIDE_NAVIGATION = "hide_navigation"; 
public static final String LOAD_DATA = "loadwithdata"; 

//References 
private Activity mAct; 
private FavDbAdapter mDbHelper; 

//Layout with interaction 
private WebView browser; 
private SwipeRefreshLayout mSwipeRefreshLayout; 

//Layouts 
private ImageButton webBackButton; 
private ImageButton webForwButton; 
private LinearLayout ll; 

//HTML5 video 
private View mCustomView; 
private int mOriginalSystemUiVisibility; 
private WebChromeClient.CustomViewCallback mCustomViewCallback; 

@SuppressLint("InflateParams") 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //Return the existing layout if there is a savedInstance of this fragment 
    if (savedInstanceState != null) { return ll; } 

    ll = (LinearLayout) inflater.inflate(R.layout.fragment_webview, 
      container, false); 

    setHasOptionsMenu(true); 

    browser = (WebView) ll.findViewById(R.id.webView); 
    mSwipeRefreshLayout = (SwipeRefreshLayout) ll.findViewById(R.id.refreshlayout); 

    // settings some settings like zooming etc in seperate method for 
    // suppresslint 
    browserSettings(); 

    browser.setWebViewClient(new WebViewClient() { 
     // Make sure any url clicked is opened in webview 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if ((url.contains("market://") || url.contains("mailto:") 
        || url.contains("play.google") || url.contains("tel:") || url 
        .contains("vid:")) == true) { 
       // Load new URL Don't override URL Link 
       view.getContext().startActivity(
         new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 

       return true; 
      } 
      // Return true to override url loading (In this case do 
      // nothing). 
      return false; 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(browser, url); 

      adjustControls(); 
     } 

    }); 

    // has all to do with progress bar 
    browser.setWebChromeClient(new WebChromeClient() { 

     @Override 
     public void onProgressChanged(WebView view, int progress) { 
      if (mSwipeRefreshLayout.isRefreshing()) { 
       if (progress == 100) { 
        mSwipeRefreshLayout.setRefreshing(false); 
       } 
      } else if (progress < 100){ 
       //If we do not hide the navigation, show refreshing 
       if (!WebviewFragment.this.getArguments().containsKey(HIDE_NAVIGATION) || 
         WebviewFragment.this.getArguments().getBoolean(HIDE_NAVIGATION) == false) 
        mSwipeRefreshLayout.setRefreshing(true); 
      } 
     } 

     @SuppressLint("InlinedApi") 
     @Override 
     public void onShowCustomView(View view, 
            WebChromeClient.CustomViewCallback callback) { 
      // if a view already exists then immediately terminate the new one 
      if (mCustomView != null) { 
       onHideCustomView(); 
       return; 
      } 

      // 1. Stash the current state 
      mCustomView = view; 
      mCustomView.setBackgroundColor(Color.BLACK); 
      mOriginalSystemUiVisibility = getActivity().getWindow().getDecorView().getSystemUiVisibility(); 

      // 2. Stash the custom view callback 
      mCustomViewCallback = callback; 

      // 3. Add the custom view to the view hierarchy 
      FrameLayout decor = (FrameLayout) getActivity().getWindow().getDecorView(); 
      decor.addView(mCustomView, new FrameLayout.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT, 
        ViewGroup.LayoutParams.MATCH_PARENT)); 


      // 4. Change the state of the window 
      getActivity().getWindow().getDecorView().setSystemUiVisibility(
        View.SYSTEM_UI_FLAG_LAYOUT_STABLE | 
          View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | 
          View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | 
          View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | 
          View.SYSTEM_UI_FLAG_FULLSCREEN | 
          View.SYSTEM_UI_FLAG_IMMERSIVE); 
      getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     } 

     @Override 
     public void onHideCustomView() { 
      // 1. Remove the custom view 
      FrameLayout decor = (FrameLayout) getActivity().getWindow().getDecorView(); 
      decor.removeView(mCustomView); 
      mCustomView = null; 

      // 2. Restore the state to it's original form 
      getActivity().getWindow().getDecorView() 
        .setSystemUiVisibility(mOriginalSystemUiVisibility); 

      //TODO Find a better solution to the keyboard not showing after custom view is hidden 
      //The user will come from landscape, so we'll first 'rotate' to portrait (rotation fixes a bug of the keybaord not showing) 
      getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
      //The we'll restore to the detected orientation (by immediately rotating back, the user should not notice any difference and/or flickering). 
      getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); 

      // 3. Call the custom view callback 
      mCustomViewCallback.onCustomViewHidden(); 
      mCustomViewCallback = null; 


     } 

    }); 

    browser.setDownloadListener(new DownloadListener() { 
     public void onDownloadStart(String url, String userAgent, 
            String contentDisposition, String mimetype, 
            long contentLength) { 
      Intent i = new Intent(Intent.ACTION_VIEW); 
      i.setData(Uri.parse(url)); 
      startActivity(i); 
     } 
    }); 

    // setting an on touch listener 
    browser.setOnTouchListener(new View.OnTouchListener() { 
     @SuppressLint("ClickableViewAccessibility") 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
       case MotionEvent.ACTION_UP: 
        if (!v.hasFocus()) { 
         v.requestFocus(); 
        } 
        break; 
      } 
      return false; 
     } 
    }); 

    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      browser.reload(); 
     } 
    }); 

    return ll; 
}// of oncreateview 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    mAct = getActivity(); 

    setRetainInstance(true); 

    String weburl = getArguments().getStringArray(MainActivity.FRAGMENT_DATA)[0]; 
    String data = getArguments().containsKey(LOAD_DATA) ? getArguments().getString(LOAD_DATA) : null; 
    if (checkConnectivity() || weburl.startsWith("file:///android_asset/")) { 
     //If this is the first time, load the initial url, otherwise restore the view if necessairy 
     if (savedInstanceState == null) { 
      //If we have HTML data to load, do so, else load the url. 
      if (data != null) { 
       browser.loadDataWithBaseURL(weburl, data, "text/html", "UTF-8", ""); 
      } else { 
       browser.loadUrl(weburl); 
      } 
     } else if (mCustomView != null){ 
      FrameLayout decor = (FrameLayout) getActivity().getWindow().getDecorView(); 
      ((ViewGroup) mCustomView.getParent()).removeView(mCustomView); 
      decor.addView(mCustomView, new FrameLayout.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT, 
        ViewGroup.LayoutParams.MATCH_PARENT)); 
     } 
    } 

} 

@Override 
public void onPause() { 
    super.onPause(); 
    browser.onPause(); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    browser.onResume(); 

    if (!this.getArguments().containsKey(HIDE_NAVIGATION) || 
      this.getArguments().getBoolean(HIDE_NAVIGATION) == false){ 

     ActionBar actionBar = ((AppCompatActivity) mAct) 
      .getSupportActionBar(); 

     if (mAct instanceof WebviewActivity) { 
      actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_HOME_AS_UP); 
     } else { 
      actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); 
     } 

     View view = mAct.getLayoutInflater().inflate(R.layout.fragment_webview_actionbar, null); 
     LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.END | Gravity.CENTER_VERTICAL); 
     actionBar.setCustomView(view, lp); 

     webBackButton = (ImageButton) mAct.findViewById(R.id.goBack); 
     webForwButton = (ImageButton) mAct.findViewById(R.id.goForward); 

     webBackButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (browser.canGoBack()) 
        browser.goBack(); 
      } 
     }); 
     webForwButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (browser.canGoForward()) 
        browser.goForward(); 
      } 
     }); 
    } else { 
     mSwipeRefreshLayout.setEnabled(false); 
    } 

    adjustControls(); 
} 

@Override 
public void onStop() { 
    super.onStop(); 

    if (!this.getArguments().containsKey(HIDE_NAVIGATION) || 
      this.getArguments().getBoolean(HIDE_NAVIGATION) == false) { 

     ActionBar actionBar = ((AppCompatActivity) getActivity()) 
       .getSupportActionBar(); 

     actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); 
    } 

} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.share: 
     shareURL(); 
     return true; 
    case R.id.favorite: 
     mDbHelper = new FavDbAdapter(mAct); 
     mDbHelper.open(); 

     String title = browser.getTitle(); 
     String url = browser.getUrl(); 

     if (mDbHelper.checkEvent(title, url, FavDbAdapter.KEY_WEB)) { 
      // This item is new 
      mDbHelper.addFavorite(title, url, FavDbAdapter.KEY_WEB); 
      Toast toast = Toast.makeText(mAct, 
        getResources().getString(R.string.favorite_success), 
        Toast.LENGTH_LONG); 
      toast.show(); 
     } else { 
      Toast toast = Toast.makeText(mAct, 
        getResources().getString(R.string.favorite_duplicate), 
        Toast.LENGTH_LONG); 
      toast.show(); 
     } 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.webview_menu, menu); 
} 

// Checking for an internet connection 
private boolean checkConnectivity() { 
    boolean enabled = true; 

    ConnectivityManager connectivityManager = (ConnectivityManager) mAct 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo info = connectivityManager.getActiveNetworkInfo(); 

    if ((info == null || !info.isConnected() || !info.isAvailable())) { 
     enabled = false; 

     Helper.noConnection(mAct); 
    } 

    return enabled; 
} 

public void adjustControls() { 
    webBackButton = (ImageButton) mAct.findViewById(R.id.goBack); 
    webForwButton = (ImageButton) mAct.findViewById(R.id.goForward); 

    if (webBackButton == null || webForwButton == null) return; 

    if (browser.canGoBack()) { 
     webBackButton.setColorFilter(Color.argb(255, 255, 255, 255)); 
    } else { 
     webBackButton.setColorFilter(Color.argb(255, 0, 0, 0)); 
    } 
    if (browser.canGoForward()) { 
     webForwButton.setColorFilter(Color.argb(255, 255, 255, 255)); 
    } else { 
     webForwButton.setColorFilter(Color.argb(255, 0, 0, 0)); 
    } 
} 

// sharing 
private void shareURL() { 
    Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    shareIntent.setType("text/plain"); 
    String appname = getString(R.string.app_name); 
    shareIntent.putExtra(Intent.EXTRA_TEXT, 
      (getResources().getString(R.string.web_share_begin)) + appname 
        + getResources().getString(R.string.web_share_end) 
        + browser.getUrl()); 
    startActivity(Intent.createChooser(shareIntent, getResources() 
      .getString(R.string.share))); 
} 

@SuppressLint("SetJavaScriptEnabled") 
@SuppressWarnings("deprecation") 
private void browserSettings() { 
    // set javascript and zoom and some other settings 
    browser.getSettings().setJavaScriptEnabled(true); 
    browser.getSettings().setBuiltInZoomControls(true); 
    browser.getSettings().setDisplayZoomControls(false); 
    browser.getSettings().setAppCacheEnabled(true); 
    browser.getSettings().setDatabaseEnabled(true); 
    browser.getSettings().setDomStorageEnabled(true); 
    browser.getSettings().setUseWideViewPort(true); 
    browser.getSettings().setLoadWithOverviewMode(true); 

    // enable all plugins (flash) 
    browser.getSettings().setPluginState(PluginState.ON); 
} 

@Override 
public boolean handleBackPress() { 
    if (browser.canGoBack()){ 
     browser.goBack(); 
     return true; 
    } 

    return false; 
} 
} 

WebviewActivity.Java

public class WebviewActivity extends AppCompatActivity{ 

private Toolbar mToolbar; 

//Options to load a webpage 
public static String URL = "webview_url"; 
public static String OPEN_EXTERNAL = "open_external"; 
public static String LOAD_DATA = WebviewFragment.LOAD_DATA; 
public static String HIDE_NAVIGATION = WebviewFragment.HIDE_NAVIGATION; 

String mWebUrl = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_webview); 
    mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); 
    setSupportActionBar(mToolbar); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    //Determine if we want to open this as intent or in the webview 
    boolean openInWebView = true; 
    if (getIntent().hasExtra(OPEN_EXTERNAL) && getIntent().getExtras().getBoolean(OPEN_EXTERNAL) == true){ 
     //If we have to load data directly, we can only do this locally 
     if (getIntent().hasExtra(LOAD_DATA)) { 
      openInWebView = false; 
     } 
    } 

    //Determine if we would like to fragment to display navigation, based on the passed bundle arguments 
    boolean hideNavigation = false; 
    if (getIntent().hasExtra(HIDE_NAVIGATION) && getIntent().getExtras().getBoolean(HIDE_NAVIGATION) == true){ 
     hideNavigation = true; 
    } 

    String data = null; 
    if (getIntent().hasExtra(LOAD_DATA)){ 
     data = getIntent().getExtras().getString(LOAD_DATA); 
    } 

    //opening the webview fragment with passed url 
    if (getIntent().hasExtra(URL)){ 
     mWebUrl = getIntent().getExtras().getString(URL); 
     if (openInWebView) { 
      openWebFragmentForUrl(mWebUrl, hideNavigation, data); 
     } else { 
      Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(mWebUrl)); 
      startActivity(browserIntent); 

      //Shutdown this activity 
      finish(); 
     } 
    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      finish(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 


public void openWebFragmentForUrl(String url, boolean hideNavigation, String data){ 
    Fragment fragment; 
    fragment = new WebviewFragment(); 

    // adding the data 
    Bundle bundle = new Bundle(); 
    bundle.putStringArray(MainActivity.FRAGMENT_DATA, new String[]{url}); 
    bundle.putBoolean(WebviewFragment.HIDE_NAVIGATION, hideNavigation); 
    if (data != null) 
     bundle.putString(WebviewFragment.LOAD_DATA, data); 
    fragment.setArguments(bundle); 

    //Changing the fragment 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.beginTransaction().replace(R.id.container, fragment) 
      .commit(); 

    //Setting the title 
    if (data == null) 
     setTitle(getResources().getString(R.string.webview_title)); 
    else 
     setTitle(""); 
} 

@Override 
public void onBackPressed() { 
    Fragment webview = getSupportFragmentManager().findFragmentById(R.id.container); 

    if (webview instanceof BackPressFragment) { 
     boolean handled = ((WebviewFragment)webview).handleBackPress(); 
     if (!handled) 
      super.onBackPressed(); 
    } else {   
     super.onBackPressed(); 
    } 
} 
}