2

我对 Cordova 框架很陌生。我正在尝试从 Droidgap 活动访问 HTML 文件,但出现异常,

Cross-origin requests are only supported for protocol schemes: HTTP, data, chrome, chrome-extension, https.

为此我找到了一个链接,也许你会发现这个问题是重复的,但我正在寻找 Android 解决方案,他们说要安装本地服务器,然后尝试访问这个 HTML,但在我的情况下,我希望它可以访问在主活动中。

以下是代码..

public class MainActivity extends DroidGap {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.appView.getSettings().setAllowFileAccess(true); //this line throws nullPointerException for appView
        super.appView.getSettings().setAllowFileAccessFromFileURLs(true);
        super.appView.getSettings().setAllowUniversalAccessFromFileURLs(true);

        super.loadUrl("file:///android_asset/www/MyHtml.html");
    }
}

我的 HTML 位于asset/www/MyHtml.html

我真的很努力解决这个问题,任何人都可以帮助摆脱这个问题吗?

4

1 回答 1

1

你说:

跨域请求仅支持协议方案:HTTP、数据、chrome、chrome-extension、https。

您还说(在评论中):

在这种情况下,我将 appView 变量设为 null,NullpointerException

首先通过 getView() 方法获取 appView,并使用局部变量:

WebView myappView    = getView();//getView is a method from DroidGap super class
WebSettings settings = myappView.getSettings();

你没有初始化DroidGap所以添加super.init();如下:

public class MainActivity extends DroidGap {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    super.init();//you were missing this
    WebView myappView    = getView();//getView is a method from DroidGap super class
    WebSettings settings = myappView.getSettings();
        settings.setAllowFileAccess(true); //this line throws nullPointerException for appView
        settings.setAllowFileAccessFromFileURLs(true);
        settings.setAllowUniversalAccessFromFileURLs(true);

        super.loadUrl("file:///android_asset/www/MyHtml.html");
    }
}

您现在应该没问题,但您也可以尝试其中的一项(或全部)(请参阅WebSettings):

settings.setAllowFileAccessFromFileURLs(true);
settings.setAllowUniversalAccessFromFileURLs(true);
settings.setAllowFileAccess(true);
settings.setAllowContentAccess(true);

请参阅DroidGap.java源代码。

于 2018-01-18T09:30:25.467 回答