Cordova 抛出异常 跨域请求仅支持协议方案

Posted

技术标签:

【中文标题】Cordova 抛出异常 跨域请求仅支持协议方案【英文标题】:Cordova throwing exception Cross origin requests are only supported for protocol schemes 【发布时间】:2018-06-27 07:12:31 【问题描述】:

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

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

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

以下是代码..

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

我真的在这个问题上苦苦挣扎,谁能帮忙解决这个问题?

【问题讨论】:

你缺少 super.init();设置 appView 变量。 【参考方案1】:

你说:

跨域请求仅支持协议方案:HTTP, 数据,铬,铬扩展,https。

你还说(在评论中):

在这种情况下,我将 appView 变量设为 null, 空指针异常

首先用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源代码。

【讨论】:

在这种情况下,我将 appView 变量设为 null,NullpointerException @Tushar Digambar Deshpande 你为什么不把它放在问题中?查看我的更新答案 对此很抱歉,但即使在添加上述行之后,即 getView() 无法正常工作并抛出相同的 NullPointerException。它说super中没有这样的方法(即在Droidgap类中)

以上是关于Cordova 抛出异常 跨域请求仅支持协议方案的主要内容,如果未能解决你的问题,请参考以下文章

跨域请求仅支持 HTTP,但不支持跨域

跨域请求仅支持 HTTP,但不支持跨域

跨域请求仅支持 HTTP,但不支持跨域

跨域请求仅支持 HTTP,但不支持跨域

仅 Angular2 中的协议方案问题支持跨源请求

Ajax请求:本地跨域的问题