Xamarin Android Javascript 和 C# 之间的双向通信

2023-11-23

我正在使用 Xamarin Android 开发一个应用程序,它有一个显示网页的 WebView。我想实现从 WebView 到 C# 的 Javascript 之间的双向通信。我可以使用这个从 Javascript 调用 C#link。但是我找不到将数据从 C# 发送回 Javascript 的方法。 有没有办法以这种方法来回发送数据。我认为用 Javascript 编写回调会起作用,但是如何从 C# 代码中触发它。

现在,我的问题是如何从 javascript 接口类调用 WebView。我有一个如上所述的 Javascript 接口类https://developer.xamarin.com/recipes/android/controls/webview/call_csharp_from_javascript/命名空间扫描器Android { 公共类 JSInterface: Java.Lang.Object { 上下文上下文; WebView webView;

    public JSInterface (Context context, WebView webView1)
    {
      this.context = context;
      this.webView = webView1;
    }

    [Export]
    [JavascriptInterface]
    public void ShowToast()
    {
      Toast.MakeText (context, "Hello from C#", ToastLength.Short).Show ();
      this.webView.LoadUrl ("javascript:callback('Hello from Android Native');");

    }   
  }
}

该代码在 LoadUrl 行引发异常。 java.lang.Throwable:在线程“Thread-891”上调用了 WebView 方法。所有 WebView 方法必须在同一线程上调用。 (预期的 Looper Looper (main, tid 1) {42ce58a0} 在 null 上调用,仅供参考,main Looper 是 Looper (main, tid 1) {42ce58a0})

现在我正在努力如何从这个Java脚本接口类引用WebView


是的。这是可能的。如果您的目标是 KitKat 或更高版本,您可以使用:

webView.EvaluateJavascript("enable();", null);

在这种情况下哪里enable();是一个JS函数。

如果您的目标是较低的 API 级别,您可以使用LoadUrl();:

webView.LoadUrl("javascript:enable();");

EDIT:

你在抱怨的地方得到的错误LoadUrl是因为由于某种原因它发生在非 UI 线程上。

既然你已经传递了Context到你的 JavascriptInterface 类中,然后你可以简单地将内容包装起来ShowToast in:

context.RunOnUiThread(() => {
   // stuff here
});

只需更改签名Context to Activity它应该可以帮助您重新回到 UI 线程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xamarin Android Javascript 和 C# 之间的双向通信 的相关文章

随机推荐

  • 在每个文档中构建具有附加字段的反应式出版物

    我想制作一个包含几个附加字段的出版物 但我不想使用Collection aggregate当集合发生变化时 我的出版物更新就会丢失 所以我不能只使用self added在其中 我打算使用Cursor observeChanges为了实现这一
  • GMP pow 中的溢出处理

    我只是 GMP 库的间接用户 主要通过swi prolog and yap 但我对解决这个问题非常感兴趣 当使用大得离谱的值执行求幂时 主机系统或 GMP 不再能够适当地处理溢出 我已经与上述系统的开发人员交谈过 但他们没有看到解决此问题的
  • 在进程和 DLL 之间共享全局/静态变量

    我只想在进程和进程调用的 dll 之间共享静态 全局变量 exe和dll位于同一内存地址空间 我不希望该变量在其他进程之间共享 问题的阐述 假设有一个静态 全局变量x in a cpp 两个都是exefoo exe和动态链接库bar dll
  • 以编程方式更改 android:digits

    我在布局 xml 中有这个 android digits 0123456789 android inputType phone gt 我想要的是能够以编程方式更改它并且能够来回更改它 输入 Type 部分很好 manual ip setIn
  • 如果特定情况没有返回结果,则使用 count(*) 显示零

    我有一个这样的查询 它返回 city 中每个案例的行数 select case edition id when 6 then DELHI when 50 then AHMEDABAD when 4 then HYDERABAD when 2
  • Android L“令人愉快的”可绘制转换

    Google 是否允许使用图标诸如此类的过渡由开发商创建 或者是开发人员有责任创建这种 令人愉快的 过渡 我真的很想在我的应用程序中实现这些 具体是这样的图标 您可以使用 AnimatedDrawable 和基于位图的框架创建动画图标 在L
  • 缓存 JavaScript 承诺结果

    我会向服务器发出一次调用以获取项目列表 如何确保仅进行一次调用并且仅处理集合一次以创建键值映射 var itemMap function getItems getAllItemsFromServer then function data d
  • 真正的自定义按钮形状

    给定任何形状 实心圆形 星形 三角形 带有透明区域的位图等 我想知道是否可以 使用最新的 Android API 知道用户是否单击了视图或视图之外 例如 如果我有一个圆形按钮 我想知道用户是否在圆圈内单击 而不是在圆圈外单击 是否可以 如果
  • 在android中捏缩放以获得图像视图?

    我有一个要求 我必须在捏合时放大和缩小图像 如果有人可以建议我使用 Imageview 的捏合缩放功能 请 只需执行以下操作即可获得捏缩放 将您的图像放在资产文件夹中并提供此代码 String imageUrl file android a
  • 如何在 Java 中读写时强制使用 UTF-16?

    我发现您可以通过以下方式指定 UTF 16 作为字符集Charset forName UTF 16 并且您可以通过以下方式创建新的 UTF 16 解码器Charset forName UTF 16 newDecoder 但我只看到指定一个的
  • DrawerNavigator:更改文本颜色

    On react navigation s DrawerNavigator 有没有办法改变项目的文本颜色和背景颜色 By default the color scheme looks like the following 由以下内容初始化
  • 如何使用 ORMLite 正确注释继承类?

    我正在尝试将继承与 ORMLite 一起使用 但通过查看文档和谷歌搜索 我无法确定它是否受支持 我想做的是拥有 public abstract class Person public int id public String name pu
  • 如何使用命令提示符导出 mysql 数据库?

    我有一个非常大的数据库 所以我想使用命令提示符导出它 但我不知道如何导出 我正在使用WAMP 首先检查你的命令行是否识别mysql命令 如果没有转到命令并输入 set path c wamp bin mysql mysql5 1 36 bi
  • Win32 应用程序中“WindowProc”的正确返回值

    在 MSDN 的 Win32 Api 文档中 位于http msdn microsoft com en us library ms633573 28VS 85 29 aspx 在WindowProc 它指出 返回值是消息处理的结果 取决于发
  • 使 bash 脚本在 Linux 和 FreeBSD 之间可移植的正确方法是什么?

    我正在编写一些 bash 脚本 我希望这些脚本可以在我的 Linux 和 FreeBSD 系统上运行 因为我主要在 Linux 上工作 所以我习惯用以下命令启动 bash 脚本 bin bash 但这在 FreeBSD 上不起作用 因为 b
  • Microsoft.Owin.Host.SystemWeb 并仍然在上下文中找不到 owin.Environment 项目

    我已经阅读了很多关于此的帖子 但仍然无法使其发挥作用 我正在使用 Visual Studio 2013 我创建了一个新的 MVC 5 项目 并认为使用新的 facebook 登录集成会很酷 它在我的电脑上的 IIS Express 上运行良
  • Facebook 点赞按钮在 Firefox 中显示,但在 IE 中不显示

    我的页面上有一个使用 XBFML 标签的 Facebook Like 按钮 我认为该代码可以正常工作 因为它可以在 Firefox 中正常工作 但在 IE 8 中 在 IE 7 兼容模式下运行 该按钮根本不显示 如果我将其全部切换到 iFr
  • 在 spring(5.0.0.RELEASE) mvc 中加载 swagger-ui.html 时出现错误

    无法解析引用 因为 无法解析指针 definitions Error 在文档中不存在 我点击了这个链接http www baeldung com swagger 2 documentation for spring rest api 但是当
  • 除了通过其安全方法之外,如何强制 Rust 获取分配的内存的所有权?

    在他 2018 年 2 月题为 Rust 中的内存安全 C 案例研究 威尔 克莱顿写道 Rust 提供了获取原始指针所有权的能力 我们使用它slice from raw parts mut and Box from raw它告诉 Rust
  • Xamarin Android Javascript 和 C# 之间的双向通信

    我正在使用 Xamarin Android 开发一个应用程序 它有一个显示网页的 WebView 我想实现从 WebView 到 C 的 Javascript 之间的双向通信 我可以使用这个从 Javascript 调用 C link 但是