1

我正在使用Cordova 5.1.1。我想從android中的CordovaWebview調用網絡URL。我的Android操作系統版本是4.4.2。這是我的Android Side代碼。Cordova 5.1.1當我從Cordova調用網絡URL時,出現onReceivedError方法中的「網絡錯誤」消息Android webview

的Android

content_main.xml文件: -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:showIn="@layout/activity_main" tools:context=".MainActivity"> 

    <org.apache.cordova.engine.SystemWebView 
     android:id="@+id/cordovaWebView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

</RelativeLayout> 

這裏是我已經初始化的WebView,並呼籲網絡URL我的java文件。

MainActivity.java:-

package com.andapp.kushpatel.cordova5_file_chooser; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

import org.apache.cordova.ConfigXmlParser; 
import org.apache.cordova.CordovaInterface; 
import org.apache.cordova.CordovaInterfaceImpl; 
import org.apache.cordova.CordovaPlugin; 
import org.apache.cordova.CordovaWebView; 
import org.apache.cordova.CordovaWebViewEngine; 
import org.apache.cordova.CordovaWebViewImpl; 
import org.apache.cordova.engine.SystemWebView; 
import org.apache.cordova.engine.SystemWebViewEngine; 

import java.util.concurrent.ArrayBlockingQueue; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 

public class MainActivity extends AppCompatActivity implements CordovaInterface{ 


    private static String TAG = MainActivity.class.getSimpleName(); 
    private CordovaWebView cordovaWebView; 
    public static final String START_URL = "http://localhost:8080/GCM_Project/"; 

    CordovaPlugin activityResultCallback; 
    private Object activityResultKeepRunning; 
    private Object keepRunning; 
    private final ExecutorService threadPool = Executors.newCachedThreadPool(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.content_main); 


     //Set up the webview 
      ConfigXmlParser parser = new ConfigXmlParser(); 
      parser.parse(this); 

     SystemWebView syswebView = (SystemWebView) findViewById(R.id.cordovaWebView); 
     cordovaWebView = new CordovaWebViewImpl(new SystemWebViewEngine(syswebView)); 
     cordovaWebView.init(this, parser.getPluginEntries(), parser.getPreferences()); 
     cordovaWebView.loadUrl(START_URL); 



    } 

    @Override 
    public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) { 
     this.activityResultCallback = command; 
     this.activityResultKeepRunning = this.keepRunning; 

     // If multitasking turned on, then disable it for activities that return results 
     if (command != null) { 
      this.keepRunning = false; 
     } 

     // Start activity 
     super.startActivityForResult(intent, requestCode); 
    } 

    @Override 
    public void setActivityResultCallback(CordovaPlugin plugin) { 
     this.activityResultCallback = plugin; 
    } 

    @Override 
    public Activity getActivity() { 
     return this; 
    } 

    @Override 
    public Object onMessage(String s, Object o) { 
     return null; 
    } 

    @Override 
    public ExecutorService getThreadPool() { 
     return threadPool; 
    } 

    @Override 
    public void requestPermission(CordovaPlugin cordovaPlugin, int i, String s) { 

    } 

    @Override 
    public void requestPermissions(CordovaPlugin cordovaPlugin, int i, String[] strings) { 

    } 

    @Override 
    public boolean hasPermission(String s) { 
     return false; 
    } 
} 

這裏就是我用了兩個科爾多瓦插件我的配置文件。

config.xml中

<widget id="io.cordova.helloCordova" version="2.0.0" xmlns="http://www.w3.org/ns/widgets"> 
    <name>Hello Cordova</name> 
    <description> 
     A sample Apache Cordova application that responds to the deviceready event. 
    </description> 
    <author email="[email protected]" href="http://cordova.io"> 
     Apache Cordova Team 
    </author> 
    <access origin="http://*/*"/> 
    <access origin="https://*/*"/> 
    <access origin="*.apache.org" /> 
    <access origin="http://*.google.com/*" /> 
    <access origin="https://*.google.com/*" /> 
    <access origin="https://*.googleapis.com/*" /> 
    <access origin="https://*.gstatic.com/*" /> 
    <access origin="tel:*" launch-external="yes"/> 
    <access origin="geo:*" launch-external="yes"/> 
    <access origin="mailto:*" launch-external="yes"/> 
    <access origin="sms:*" launch-external="yes"/> 
    <access origin="market:*" launch-external="yes"/> 
    <content src="index.html" /> 

    <allow-navigation href="http://*/*" /> 
    <allow-navigation href="https://*/*" /> 

    <preference name="loglevel" value="DEBUG" /> 

    <feature name="FileChooser"> 
     <param name="android-package" value="com.andapp.kushpatel.cordova5_file_chooser.FileChooser" /> 
    </feature> 

    <feature name="WhitelistPlugin"> 
     <param name="android-package" value="com.andapp.kushpatel.cordova5_file_chooser.WhitelistPlugin" /> 
    </feature> 

    <preference name="loadUrlTimeoutValue" value="300000" /> 
</widget> 

在服務器端有一個HTML文件。在那個html文件中,我使用了meta標籤作爲whiteList插件。

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/> 

現在,當我打電話,從來沒有任何顯示的WebView和日誌我得到「出現網絡錯誤」錯誤。

我在下面引用了描述代碼的鏈接。 https://cordova.apache.org/docs/en/6.x/reference/cordova-plugin-whitelist/

How to configure Cordova-android 4.0 with white-list

"No Content-Security-Policy meta tag found." error in my phonegap application

回答

0

你必須添加此行來添加插件。現在它會正常工作。

ConfigXmlParser parser = new ConfigXmlParser(); 
     parser.parse(mActivity); 

CordovaPlugin plugin = new WhitelistPlugin(mActivity); 
       PluginEntry entry = new PluginEntry("whiteList",plugin); 
       parser.getPluginEntries().add(entry); 
+0

好的答案:) –

相關問題