【问题标题】:How to enable cookie in webview for local js file?如何在 webview 中为本地 js 文件启用 cookie?
【发布时间】:2014-08-04 12:37:34
【问题描述】:

我想在 WebView 中接受 cookie,但出现错误

未捕获的错误:SECURITY_ERR:DOM 异常 18

问题仅出现在本地 js 文件中。正如 Android 文档所说,我必须使用 setAcceptFileSchemeCookies

但这并不能解决我的问题。我不知道我做错了什么。

整个代码列表:

protected override void OnCreate(Bundle bundle) {
        try {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);
            _webView = FindViewById<WebView>(Resource.Id.webview);
            string html = string.Empty;
            Android.Webkit.CookieManager.SetAcceptFileSchemeCookies(true);               
            using (var stream = _webView.Context.Assets.Open("res/mobileLogin.html")) {
                using (TextReader reader = new StreamReader(stream)) {
                    html = reader.ReadToEnd();
                }
            }
            _webView.Settings.JavaScriptEnabled = true;
            _webView.Settings.AllowFileAccess = true;
            _webView.Settings.AllowUniversalAccessFromFileURLs = true;
            _webView.SetWebViewClient(new HybridWebViewClient());
            _webView.SetWebChromeClient(new WebChromeClient());
            _webView.LoadDataWithBaseURL("file:///android_asset/res/", html, "text/html", "UTF-8", null);
            Android.Webkit.CookieManager.Instance.SetAcceptCookie(true);

        } catch (Exception ex) {
            Console.WriteLine(ex.Message);
        }
    }

【问题讨论】:

    标签: javascript android cookies webview xamarin.android


    【解决方案1】:

    据我所知,在 Android 上将 cookie 主机设置为 localhost 会触发安全异常。如果您在远程主机上尝试相同的操作,它可能会起作用。那当然不能解决你的问题。像这样:https://stackoverflow.com/a/24897724/368379 可以提供一个起点来自己处理东西,但与 Cookie 不完全相同。

    如果你走 JavascriptInterface 路线,你可以像这样在 Xamarin.Android 中实现它:

    public class MyJavascriptInterface : Java.Lang.Object
    {
        [Export("DoStuff")]
        [JavascriptInterface]
        public void DoStuff(string stuff)
        {
            // do something here with the string
        }
    }
    
    var webView = new WebView(this);
    webView.Settings.JavaScriptEnabled = true;
    var interface = new MyJavascriptInterface();
    webView.AddJavascriptInterface(interface, "MyJavascriptInterface");
    

    然后你可以像这样在Javascript中调用它:

    MyJavascriptInterface.DoStuff("My Awesome String");
    

    【讨论】:

      猜你喜欢
      • 2013-06-18
      • 1970-01-01
      • 2021-10-23
      • 2013-05-02
      • 2020-11-05
      • 2015-07-28
      • 2018-08-21
      • 2016-02-10
      • 1970-01-01
      相关资源
      最近更新 更多