我想在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);
}
}
答案 0 :(得分:0)
据我所知,在Android上将Cookie主机设置为localhost
会触发安全例外。如果你尝试使用远程主机,它可能会工作。那当然不能解决你的问题。这样的事情:https://stackoverflow.com/a/24897724/368379可以提供一个自己处理东西的起点,但与Cookies完全不同。
如果你使用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");