我在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

现在该项目不使用共享人行横道库,但我要它共享库,所以我提取了Whol项目后在项目中编辑此文件“ 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#代码工作时将无法检测到人行横道库

并构建并运行,它将起作用...

最佳答案

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


改成:

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


我试着这样称呼它,并且奏效了

关于javascript - 在Android Xamarin CrossWalk Webview中从Javascript调用C#函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54053326/

10-11 22:22