菜鸟教程小白 发表于 2022-12-13 11:11:05

javascript - WKWebView.EvaluateJavaScript 永远不会返回


                                            <p><p>我正在尝试使用 <code>WKWebView.EvaluateJavaScript(string, WKJavascriptEvaluationResult)</code> 从我的 javascript 代码中将一个值返回给我的应用程序。问题是,委托(delegate) <code>WKJavascriptEvaluationResult</code> 永远不会被调用。这是我的代码:</p>

<p>C#:</p>

<pre><code>TaskCompletionSource&lt;NSObject&gt; tcs = new TaskCompletionSource&lt;NSObject&gt;();

webView.EvaluateJavaScript(javascript, (result, error) =&gt;
    {
      tcs.SetResult(result);
    });

return tcs.Task.Result;
</code></pre>

<p>Javascript:</p>

<pre><code>function a()
{
    return &#34;test&#34;;
}

a();
</code></pre>

<p>应用程序卡在 <code>Wait()</code> 调用上并且永远不会返回,因为 <code>WKJavascriptEvaluationResult</code> 永远不会被调用。有我不知道的已知问题吗?有没有更好的方法从我的 javascript 代码获取值到我的应用程序,还是我没有正确使用它?</p>

<p>注意:我使用 TaskCompletionSource 只是为了使整个方法同步。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果您使用的是 Xamarin IOS,在 Xamarin 表单中为我工作应该是相同的。</p>

<pre><code>    public class IosWebViewRenderer : ViewRenderer&lt;HybridWebView, WKWebView&gt;
    {
      const string HtmlCode = &#34;document.body.outerHTML&#34;;

      protected override void OnElementChanged(ElementChangedEventArgs&lt;HybridWebView&gt; e)
      {
            base.OnElementChanged(e);
            if (Control == null)
            {
                WKWebView wKWebView = new WKWebView(Frame, new WKWebViewConfiguration());
                wKWebView.NavigationDelegate = new WebViewDelate();
                SetNativeControl(wKWebView);
            }
            if (e.NewElement != null)
            {
                NSUrlRequest nSUrlRequest = new NSUrlRequest(new NSUrl(hybridWebView.Uri.ToString()));
                Control.LoadRequest(nSUrlRequest);
            }
      }

      class WebViewDelate : WKNavigationDelegate
      {
            public override void DidFinishNavigation(WKWebView webView, WKNavigation navigation)
            {
                WKJavascriptEvaluationResult handler = (NSObject result, NSError error) =&gt; {
                  if (error != null)
                  {
                        Console.WriteLine(result.ToString());
                  }
                };
                webView.EvaluateJavaScript(HtmlCode, handler);
            }
      }
    }
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于javascript - WKWebView.EvaluateJavaScript 永远不会返回,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32832077/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32832077/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: javascript - WKWebView.EvaluateJavaScript 永远不会返回