Javascript 为什么可以';我不能在android studio上访问字符串变量中的localStorage吗?

Javascript 为什么可以';我不能在android studio上访问字符串变量中的localStorage吗?,javascript,java,android,android-webview,local-storage,Javascript,Java,Android,Android Webview,Local Storage,我有一个webview应用程序的基本代码: package com.budget.noname.budget; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.webkit.WebSettings; import android.webkit.WebView; public class MainActivity extends AppCompatActivity

我有一个webview应用程序的基本代码:

package com.budget.noname.budget;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String data = "<p id='v'></p><script>x=3; y=5; m=0; document.getElementById('v').innerHTML = m;</script>";
        WebView simpleWebView=(WebView) findViewById(R.id.simpleWebView);
        WebSettings webSettings = simpleWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setAllowContentAccess(true);
        webSettings.setAllowFileAccess(true);
        webSettings.setDomStorageEnabled(true);
        //simpleWebView.loadUrl("file:///android_asset/index.htm");
        simpleWebView.loadDataWithBaseURL(null, data, "text/html", "UTF-8", "");

    }
}
package com.budget.noname.budget;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.webkit.WebSettings;
导入android.webkit.WebView;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
字符串数据=“

x=3;y=5;m=0;document.getElementById('v')。innerHTML=m;”; WebView simpleWebView=(WebView)findViewById(R.id.simpleWebView); WebSettings WebSettings=simpleWebView.getSettings(); setJavaScriptEnabled(true); webSettings.setAllowContentAccess(true); webSettings.setAllowFileAccess(true); webSettings.setDomStorageEnabled(true); //simpleWebView.loadUrl(“file:///android_asset/index.htm"); simpleWebView.loadDataWithBaseURL(null,数据,“text/html”,“UTF-8”,““”); } }
如果我把我的webapp(index.htm)放在assets文件夹中并加载它,它工作得很好,但是我的代码对任何想提取.apk的人都是可用的

我试图将代码粘贴到字符串上,并使用loadDataWithBaseURL加载它。它几乎同样有效。问题是:如果我试图访问localStorage,代码就会中断。为什么呢

例如:

String data = "<script>x=localStorage.getItem('name');</script>";
String data=“x=localStorage.getItem('name');”;
没用!!!虽然,正如我所说,如果我从资产文件夹加载相同的代码,它会工作

就像现在一样:

仅允许在来自特定站点的页面上访问
localStorage
“网络安全”方案,如
http:
https:
文件:
。这对我来说不管用
关于:
数据:
方案,例如,或针对您需要的任何自定义方案 可能正在使用

如果您查看一下,我们可以看到
baseUrl
param的以下语句:

字符串:用作页面基本URL的URL。如果
null
默认为 “
about:blank

这解释了为什么只有您的
文件://
示例有效,还意味着您必须向该参数传递有效的内容。您可以加载所需的任何URL,如:

webView.loadDataWithBaseURL("http://google.com", data, "text/html", "UTF-8", "");
甚至
http://localhost:80
将使其正常工作



但是,这不会使您的
localStorage
值可用于
WebView
的其他实例(默认情况下,它们不会在Android上进行对话)。一个常见的选择是使用另一个库来为您抽象它,例如

您得到的错误。您是否拥有清单中声明的内部存储的读/写权限?我没有发现任何错误,因为我不知道如何调试webapp。就是这么简单:我写的任何html/javascript代码都可以工作,除了localStorage标记。@Baruch,标记是自动的suggest@Baruch,我不知道你为什么认为这个问题与JavaScript无关。如果我没弄错的话,这个错误是在Android应用程序的WebView中执行JavaScript时发生的。@VictorRibeiro,你看过这个问题了吗?我也非常感谢你。你知道有什么切实可行的方法比仅仅“提取”apk更难访问资产文件夹吗?这基本上是不可能的。看一看:事实上,我不知道为了将文件加密到Android应用程序本身,你需要增加多少复杂性。我建议远程请求这些资源(例如从rest),这是一个选项。。。