Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin 注册后读取WebView本地存储_Xamarin_Xamarin.forms - Fatal编程技术网

Xamarin 注册后读取WebView本地存储

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

在我的Xamarin应用程序中,我有一个webview,它承载一个“基于web的”注册页面和基于React(SPA web应用程序)构建的登录页面。我们不希望使用Xamarin从头开始开发该页面。注册或登录后,React将访问令牌存储在web localStorage web对象中

我想从Xamarin C#函数中读取该标记,并将其用于其他操作

我成功地使用javascript注入读取了值,类似于:

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>