【问题标题】:Xamarin.Forms.WebView Add item to local storage before Visiting URLXamarin.Forms.WebView 在访问 URL 之前将项目添加到本地存储
【发布时间】:2018-11-28 10:03:08
【问题描述】:

我在 xaml 中使用 WebView 创建了 ContenPage(代码如下)。我在构造函数中传递webpageURL。我的目标是在开始加载传递的 URL 之前使用 javascirpt 将项目添加到 webview localstorage。我尝试了几种方法,例如

Browser.EvaluateJavaScriptAsync(javascirpt); 或者 Browser.Evaluate(javascirpt);

在构造函数中执行之前

Browser.Source = URL;

或者把这个方法封装在里面

Device.BeginInvokeOnMainThread(async () =>{});

但它们仍然没有按预期工作。你知道我的问题有什么解决办法吗?

public partial class WebView : ContentPage
{
public WebView(string URL)
{
    string item = "test";
    string javascirpt = String.Format("localStorage.setItem('ls.item', '{0}')", item);
    Browser.Eval(javascirpt);
    Browser.Source = URL;
}
}

Xaml:

<WebView x:Name="Browser" Grid.Column="0" Grid.Row="0" Grid.RowSpan="2"
          HeightRequest="1000"
          WidthRequest="1000"
          Navigating="WebOnNavigating"
          Navigated="WebOnEndNavigating" />

【问题讨论】:

    标签: webview xamarin.forms local-storage


    【解决方案1】:

    我们不建议将这些代码放在构造函数中。因为当您调用这些代码时,“WebView”类尚未初始化。请尝试将它们移至方法 OnAppearing。

    protected override void OnAppearing()
    {
       base.OnAppearing(); 
    
       string item = "test";
       string javascirpt = String.Format("localStorage.setItem('ls.item', '{0}')", item);
       Browser.Eval(javascirpt);
       Browser.Source = URL;
    
    }
    

    【讨论】:

    • 我什至使用过:protected async override void OnAppearing() and response = await Browser.EvaluateJavaScriptAsync(javascript); javascript = "localStorage.getItem('ls.item')";响应 = 等待 Browser.EvaluateJavaScriptAsync(javascript);我总是收到 null 作为回应。在WebView页面上锁定和解锁手机后,我终于收到“测试”响应。
    • 为什么不在某些页面通过url测试并设置变量,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 2014-12-24
    相关资源
    最近更新 更多