2016-10-19 24 views
2

私は、これらの設定と私のアンドロイドアプリケーションでWebViewを使用しています:Android:Android 4.1のjavascriptでwebviewを読み込む方法は?

webview = (WebView) findViewById(R.id.webViewViewer); 
    WebSettings webSettings = webview.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webview.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); 
    webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
    webview.getSettings().setAppCacheEnabled(true); 
    webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
    webSettings.setDomStorageEnabled(true); 
    webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); 
    webSettings.setUseWideViewPort(true); 
    webSettings.setSavePassword(true); 
    webSettings.setSaveFormData(true); 
    webSettings.setEnableSmoothTransition(true); 
    webview.getSettings().setJavaScriptEnabled(true); 
    webview.getSettings().setUseWideViewPort(true); 
    webview.setWebChromeClient(new WebChromeClient()); 

私も(onPageFinished方法でいくつかのjavascript editationをしています)。

私はそれは、Android 5.0で使用し、すべてが正常に動作しますが、私はそれは、Android 4.1でテストしたときにコンソールが表示さerror: Unsafe JavaScript attempt to access frame with URL http://www.example.sk私はそれがあまりにも古いAndroidのバージョンで動作させるために何をすべき

答えて

0
// Actually, 4.1 has issues on javascript. If you want to load web view on 4.1 .you can android web view by using this code 

    public class MainActivity extends AppCompatActivity { 

     private final String url = "Your Url"; 
    private WebView mWebView; 
     private CustomTabsClient mClient; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      if (AppStatus.getInstance(this).isOnline(this)) { 
       int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
       if (currentapiVersion >= Build.VERSION_CODES.LOLLIPOP) { 
        setContentView(R.layout.noraml); 
        mWebView = (WebView) findViewById(R.id.webView); 
        mWebView.getSettings().setJavaScriptEnabled(true); 

        mWebView.setWebViewClient(new WebViewClient() { 
         @Override 
         public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
    //this is for avoiding web page not found 
          view.loadUrl("file:///android_asset/index.html"); 
          Toast.makeText(getBaseContext(), "Oops!!! Please check your internet connection", Toast.LENGTH_SHORT).show(); 

         } 
        }); 

        mWebView.loadUrl(url); 
       } else { 

        setContentView(R.layout.activity_main); 
        CustomTabsServiceConnection mConnection = new CustomTabsServiceConnection() { 

         @Override 
         public void onCustomTabsServiceConnected(ComponentName componentName, CustomTabsClient customTabsClient) { 
          mClient = customTabsClient; 
         } 

         @Override 
         public void onServiceDisconnected(ComponentName componentName) { 
          mClient = null; 
         } 
        }; 

        String packageName = "com.android.chrome"; 
        CustomTabsClient.bindCustomTabsService(this, packageName, mConnection); 
       } 
      } 
      else { 
       setContentView(R.layout.error); 
      } 
     } 
     public void loadCustomTabs(View view) { 


       CustomTabsIntent.Builder mBuilder = new CustomTabsIntent.Builder(getSession()); 

       mBuilder.setToolbarColor(ContextCompat.getColor(this, R.color.indigo_500)); 
       mBuilder.setCloseButtonIcon(BitmapFactory.decodeResource(getResources(), 
         R.mipmap.ic_arrow_back_white_24dp)); 
       mBuilder.addMenuItem("Share", setMenuItem()); 
       mBuilder.setStartAnimations(this, R.anim.slide_in_right, R.anim.slide_out_left); 
       mBuilder.setExitAnimations(this, R.anim.slide_in_left, R.anim.slide_out_right); 
       CustomTabsIntent mIntent = mBuilder.build(); 
       mIntent.launchUrl(this, Uri.parse(url)); 


     } 

     private CustomTabsSession getSession() { 
      return mClient.newSession(new CustomTabsCallback() { 
       @Override 
       public void onNavigationEvent(int navigationEvent, Bundle extras) { 
        super.onNavigationEvent(navigationEvent, extras); 
       } 
      }); 
     } 

     private PendingIntent setMenuItem() { 
      Intent shareIntent = new Intent(Intent.ACTION_SEND); 
      shareIntent.setType("text/plain"); 
      shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject For you website"); 
      shareIntent.putExtra(Intent.EXTRA_TEXT, url); 
      return PendingIntent.getActivity(this, 0, shareIntent, 0); 
     } 
} 
//Custom web view 
public class CustomWebView extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_custom_web_view); 
     class MyWebViewClient extends WebViewClient { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       if (Uri.parse(url).getHost().equals(getIntent().getStringExtra("url"))) 
        return false; 
       else 
        return super.shouldOverrideUrlLoading(view, url); 
      } 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       view.loadUrl("file:///android_asset/index.html"); 
       Toast.makeText(getBaseContext(), "Oops!!! Please check your internet connection", Toast.LENGTH_SHORT).show(); 
      } 
     } 

     WebView webView = (WebView) findViewById(R.id.webview); 
     webView.getSettings().setJavaScriptEnabled(true); 

     webView.loadUrl(getIntent().getStringExtra("url")); 
     webView.setWebViewClient(new MyWebViewClient()); 
    } 
} 
関連する問題