Xamarin 注册后读取WebView本地存储
在我的Xamarin应用程序中,我有一个webview,它承载一个“基于web的”注册页面和基于React(SPA web应用程序)构建的登录页面。我们不希望使用Xamarin从头开始开发该页面。注册或登录后,React将访问令牌存储在web localStorage web对象中 我想从Xamarin C#函数中读取该标记,并将其用于其他操作 我成功地使用javascript注入读取了值,类似于:Xamarin 注册后读取WebView本地存储,xamarin,xamarin.forms,Xamarin,Xamarin.forms,在我的Xamarin应用程序中,我有一个webview,它承载一个“基于web的”注册页面和基于React(SPA web应用程序)构建的登录页面。我们不希望使用Xamarin从头开始开发该页面。注册或登录后,React将访问令牌存储在web localStorage web对象中 我想从Xamarin C#函数中读取该标记,并将其用于其他操作 我成功地使用javascript注入读取了值,类似于: var access_token = await webView.InjectJavascrip
var access_token = await webView.InjectJavascriptAsync("localStorage.getItem('access_token')");
问题在于,只有在webview中承载的注册之后,才会填充该值,并且SPA应用程序URL更改时不会触发“导航”事件
您知道在webview容器中完成注册后如何读取localstorage值吗
如果我能告诉Xamarin注册完成了,但找不到Android和IOS的对等版本,那么类似Windows Phone的东西对我来说将是非常好的 由于您可以编辑网页,您可以在js中创建一个函数,并在注册完成后返回访问令牌,您可以参考以下内容: Js在C#中调用方法 创建一个C#类:
class MyJSInterface : Java.Lang.Object
{
Context context;
public MyJSInterface (Context context)
{
this.context = context;
}
[JavascriptInterface]
[Export]
public void GetAccessToken(string accesstoken)
{
Toast.MakeText(context, accesstoken, ToastLength.Short).Show();
}
}
然后在JS中调用它(在您的例子中,注册完成后,您可以像CSharp.GetAccessToken('accesstoken')
那样调用它):
呼叫C#
您可以参考此文档:也许您可以在网页中创建一个方法,通知Xamarin并在注册后返回访问令牌completed@LeoZhu-感谢您的评论。问题是如何通知xamarin?这就是我要看的这个网页是本地的吗?或者你可以编辑网页?@LeoZhu MSFT,它的远程页面,但我可以根据需要访问和更改。如果你想在xamarin.forms中使用,你可以在webview customrenderer中定义,如果在xamarin.android中,你可以在ActivityIOS中定义,你可以参考以下内容:,我不熟悉ios
class MyJSInterface : Java.Lang.Object
{
Context context;
public MyJSInterface (Context context)
{
this.context = context;
}
[JavascriptInterface]
[Export]
public void GetAccessToken(string accesstoken)
{
Toast.MakeText(context, accesstoken, ToastLength.Short).Show();
}
}
<button type="button" onClick="CSharp.GetAccessToken('Call C#')">Call C#</button>