gpt4 book ai didi

c# - 为什么 EvaluateJavaScriptAsync 没有被执行?

转载 作者:行者123 更新时间:2023-11-29 23:35:05 24 4
gpt4 key购买 nike

我有 js 函数 getState() 返回元素的 css 属性( block 或无)但它不工作,visual studio 给出了一些线程消息:

09-14 23:30:22.081 W/WebView (6707): java.lang.Throwable: 在线程“Thread-12”上调用了 WebView 方法。所有 WebView 方法都必须在同一个线程上调用。 (预期的 Looper Looper (main, tid 2) {4aca651} 调用了 null,仅供引用,main Looper 是 Looper (main, tid 2) {4aca651})09-14 23:30:22.081 W/WebView(6707):在 android.webkit.WebView.checkThread(WebView.java:2539)09-14 23:30:22.081 W/WebView (6707): 在 android.webkit.WebView.evaluateJavascript(WebView.java:1054)线程已完成:#4

谁能找出错误在哪里?此外,当它起作用时,返回的类型可以与标签文本相关联,或者它不会是一个简单的字符串?

我的代码:

        public static Label label1;
public static WebView webnav;
StackLayout parent = null;
public MainPage()
{
InitializeComponent();
webnav = new WebView
{
HeightRequest = 1000,
WidthRequest = 1000,
Source = "https://www.example.com/test.html",

};
webnav.Navigated += WebView_Navigated;

label1 = new Label
{
WidthRequest = 900,
HeightRequest = 60,
Text = "default text"
};

parent = new StackLayout();
parent.Children.Add(webnav);
parent.Children.Add(label1);
Content = parent;
}

public void WebView_Navigated(object sender, WebNavigatedEventArgs e)
{
Task.Run(JSRun);
}

public static string retorno;
public static async Task JSRun()
{
retorno = await webnav.EvaluateJavaScriptAsync("getState();");
}

最佳答案

All WebView methods must be called on the same thread... FYI main Looper is Looper (main, tid 2)

您正在使用 Task.Run 执行一个方法,该方法又调用 EvaluateJavaScriptAsync,因此您不在主/UI 线程上。这就是错误试图告诉您的内容。

因此删除 Task.Run:

public void WebView_Navigated(object sender, WebNavigatedEventArgs e)
{
JSRun();
}

或者将您的 EvaluateJavaScriptAsync 调用发布到 UI 消息/循环程序队列:

Device.BeginInvokeOnMainThread(async() =>
{
retorno = await webnav.EvaluateJavaScriptAsync("getState();");
});

关于c# - 为什么 EvaluateJavaScriptAsync 没有被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52339100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com