【问题标题】:Call C# Function From Javascript in Android Xamarin CrossWalk Webview在 Android Xamarin CrossWalk Webview 中从 Javascript 调用 C# 函数
【发布时间】:2019-05-31 20:59:30
【问题描述】:

我在 Visual Studio 的输出中出现错误:

     Uncaught TypeError: Foo.run is not a function

尝试在 Index.html 中运行 JavaScript 函数以调用 C# 方法时:

     <button type="button" onClick="Foo.run()">Click Me!</button>

我尝试添加符号:

        [JavascriptInterface]
        [Export("Run")]  

我使用 CrossWalk WebView 不起作用,所以我添加了:

         [Org.Xwalk.Core.JavascriptInterface]
         [Export("Run")] 

这是我在 C# 中的完整代码:

 using Android.App;
 using Android.Widget;
 using Android.OS;
 using System;
 using Android.Views;
 using Android.Webkit;
 using Java.Interop;
 using Android.Content;

 namespace XWalk
  {
     [Activity(Label = "XWalk", MainLauncher = true)]
     public class MainActivity : Org.Xwalk.Core.XWalkActivity
     {
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);
    }

    protected override void OnXWalkReady()
    {
        var view = new RelativeLayout(this.BaseContext);
        var mp = ViewGroup.LayoutParams.MatchParent;
        var xwv = new Org.Xwalk.Core.XWalkView(this.BaseContext, this);
        view.AddView(xwv);
        this.AddContentView(view, new ViewGroup.LayoutParams(mp, mp));

        xwv.AddJavascriptInterface(new Foo(this), "Foo");
        xwv.LoadUrl("file:///android_asset/index.html"); 


    }


    class Foo : Java.Lang.Object, Java.Lang.IRunnable
    {
        Context context;

        public Foo(Context context)
        {
            this.context = context;
        }


        [Org.Xwalk.Core.JavascriptInterface]
        //[Export]
       ///[JavascriptInterface]
        [Export("Run")]
        public void Run()
        {
            Toast.MakeText(context, "This is a Toast from C#!", ToastLength.Short).Show();
        }
    }

}
}  

我的目标是 Android 4.1 及更高版本,所以我使用了

      Java.Lang.IRunnable

正如 Xamarin 文档中提到的 但是单击 HTML 按钮时输出中的结果:

      Uncaught TypeError: Foo.run is not a function 

更新

对于任何想要在这里构建它的人来说,它是如何与我合作的:

下载项目: https://github.com/KevinGliewe/Xamarin.Android.XWalk

现在项目不使用共享人行横道库但我希望它共享库所以我所做的是在我提取整个项目后在项目中编辑此文件“XWalk.Binding.csproj” 并改变:

<ItemGroup>
    <LibraryProjectZip Include="Jars\xwalk_core_library-23.53.589.4-x86.aar" />
 </ItemGroup>

到:

   <ItemGroup>
     <LibraryProjectZip Include="Jars\xwalk_shared_library-23.53.589.4.aar" />
  </ItemGroup>

并从以下位置下载共享库: https://download.01.org/crosswalk/releases/crosswalk/android/maven2/org/xwalk/

并将其放入 XWalk.Binding 项目内的 Jars 文件夹中

然后打开解决方案项目,只需构建整个项目并运行它.. 如果您想要与我一起使用的发布版本,请确保 XWalk.Binding 项目属性中的选项 在构建选项卡中,检查了“定义调试常量”和“定义跟踪常量”,否则在使用 c# 代码时它不会检测到人行横道库

构建它并运行它,它就会工作......

【问题讨论】:

  • 可以吗?
  • 它的工作,但你需要绑定 java 到 c# github.com/KevinGliewe/Xamarin.Android.XWalk
  • 现在 foo.run () 或 foo.run () 工作了吗?
  • 是的,它的工作它的工作谢谢你 Foo.Run() 正在工作
  • 很高兴它对您有所帮助。如果你能给我一个标记,我将非常感激

标签: javascript c# android xamarin


【解决方案1】:
<button type="button" onClick="Foo.run()">Click Me!</button>

改为:

<button type="button" onClick="Foo.Run()">Click Me!</button>

我试过这样称呼它,它奏效了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 2011-05-18
    • 2017-04-08
    • 2017-10-15
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多