gpt4 book ai didi

javascript - 从 WebChromeClient 访问 Activity 方法

转载 作者:行者123 更新时间:2023-12-03 09:52:29 26 4
gpt4 key购买 nike

我正在使用 Xamarin 编写 Android 应用程序,在该应用程序中,我有一个 webview 需要在创建应用程序时加载,完全加载后,我在 HTML 页面中调用一些 javascript 来设置图表。

我正在尝试使用自定义 WebChromeClient 来重写 OnProgressChanged 方法,当它完全加载时,它会调用我的 MainActivity 中的方法>.

这是MainActivity代码:

using System;
using System.Text;
using System.Timers;
using System.Collections;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Text;
using Android.Text.Style;
using Android.Webkit;

public class MainActivity : Activity
{
WebView graph;

protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);

graph = FindViewById<WebView>(Resource.Id.webGraph);

//Initializes the WebView
graph.SetWebChromeClient(new myWebChromeClient());
graph.Settings.JavaScriptEnabled = true;
graph.LoadUrl("file:///android_asset/graph.html");

我创建的 myWebChromeClient 类如下所示:

class myWebChromeClient : WebChromeClient
{
public override void OnProgressChanged(WebView view, int newProgress)
{
base.OnProgressChanged(view, newProgress);

if (newProgress == 100) {MainActivity.setUpGraph();}
}
}

myWebChromeClient 位于 MainActivity 内,但我无法访问 setUpGraph 方法,即使它是公共(public)方法。

任何帮助将不胜感激!

最佳答案

在 myWebChromeClient 类中接受并存储 MainActivity 类型的引用。然后才能在MainActivity中调用setUpGraph()函数。

编辑

myWebChromeClient 类:

class myWebChromeClient : WebChromeClient
{
public MainActivity activity;
public override void OnProgressChanged(WebView view, int newProgress)
{
base.OnProgressChanged(view, newProgress);

if (newProgress == 100) { activity.setUpGraph(); }
}
}

以及 Activity :

    public class MainActivity : Activity
{
WebView graph;

protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);

graph = FindViewById<WebView>(Resource.Id.webGraph);

//Initializes the WebView
myWebChromeClient client = new myWebChromeClient();
client.activity = this;
graph.SetWebChromeClient(client);
graph.Settings.JavaScriptEnabled = true;
graph.LoadUrl("file:///android_asset/graph.html");

为了简单起见,我在客户端添加了一个公共(public)变量,请不要在生产中使用相同的变量。在构造函数中传递引用或使用 get-set。

关于javascript - 从 WebChromeClient 访问 Activity 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30850115/

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