2013-04-22 37 views
2

快速的细节:我使用ASP.NET MVC 4在显示的Android应用程序的WebView传递javascript中的变量作为字符串

在我的web应用程序我有类似以下

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /> 
<script type="text/javascript"> 
    function showAndroidToast(toast) { 
     Android.showToast(toast); 
    } 
</script> 
的javascript

我希望通过字符串'toast'将当前用户帐户传递给android。

我已经尝试了几种不同的方法将帐户名称作为字符串传递给android,但都没有工作,我认为这是因为JavaScript是在新线程上执行的。是否有可能做到这一点?

+0

你在WebView设置中启用了JavaScript吗? – 2013-04-22 15:14:17

+1

是的,请参阅我对以下答案的回复,以查看我的问题在哪里出现。 – Yorimitsu 2013-04-23 06:08:14

回答

0

我在编辑上一个答案,因为这个问题的要求与标题构成有很大的不同。这不是关于如何将JavaScript变量作为字符串传递给android的(java)类。这更多的是与Android的框架和ASP.NET Web服务之间的交互有关的问题。所以,在此我广泛地发布了一个处理这个话题的链接(一篇写得很好的文章)http://www.codeproject.com/Articles/304302/Calling-Asp-Net-Webservice-ASMX-From-an-Android-Ap。 [注意:此解决方案使用KSOAP库jar for android平台。 ]

基本上你会希望有一个web服务方法返回登录用户,这个方法可以被Android的本地java类调用(例如,让我们称之为'soapActivity')。现在,为了将这些信息从java类'soapActivity'传递给webView,请使用webView实例变量的addJavascriptInterface()方法。希望这可以帮助。

+1

感谢您的回复。我可以通过'toast'传递一个定义的字符串,但是我想知道如何将当前的用户登录名存储在'toast'中。例如。在我的控制器中,我可以通过使用“'HttpContext.User.Identity.Name'”来设置用户登录详细信息的savepath,但我不确定如何在视图中执行此操作并将其存储在“toast”中。 – Yorimitsu 2013-04-23 05:10:57

+0

据我了解,HttpContext.User.Identity.Name提供当前登录到Windows操作系统的用户名。但是这些信息只有'ASP.NET MVC 4'框架,而不是Android的webView。它只是一个浏览器,它并不(实际上不应该)具有破译当前用户登录到ASP.NET框架等细节的功能。这些信息必须通过一些java脚本接口从ASP.NET框架传递给Android,恐怕它不可避免。 – Sriram 2013-04-23 16:27:05

+0

当我使用'HttpContext.User.Identity.Name'时,它返回登录到Web服务的人员的用户名。问题是,当我在android应用程序中使用WebView并登录到ASP.NET Web服务时,“HttpContext.User.Identity.Name”可以工作,但是当我在android上使用'JavascriptInterface'时,因为它是在一个新的线程,它不会与登录的webview相关联,并且不能识别'HttpContext.User.Identity.Name',甚至没有登录。但我的问题是你说的,我是否设置'toast'字符串来传递用户名? – Yorimitsu 2013-04-23 23:02:58

相关问题