Android在Button中调用JavaScript函数

时间:2017-09-23 20:50:19

标签: javascript java android

我有一个Android活动,而且我有一个按钮,该按钮需要访问一些Javascript功能。只需我的应用程序获取用户信息(ID,传递)然后转到网页(此操作使用asynctask类执行backgrun)将这两个信息写为ID并传递然后用户单击我的应用程序按钮中的登录按钮必须使用一些js功能

Private Function searchCells(ifc)
    Dim ss As Integer
    Dim fc As Range
    Dim ssMax As Integer
    Dim ssMin As Integer

    ss = lstboxChannelList.List(ifc, 1)
    ssMax = ss + lstboxChannelList.List(ifc, 2)
    ssMin = ss - lstboxChannelList.List(ifc, 2)

    Set fc = Cells.Find(What:=(ssMin <= ssMax), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    fc.Select

    End Function

这是功能。我需要使用

我的帖子和获取网站连接请求

POST //

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>

这些代码用于放入ID并传递

获取//

URL url = new URL(params[0]); //http://login.cu.edu.tr/Login.aspx?     site=https://derskayit.cu.edu.tr&ReturnUrl=%2f
            connection=(HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            OutputStreamWriter writer = new   OutputStreamWriter(connection.getOutputStream());
            writer.write(data);
            writer.flush();

对我有任何帮助或建议我对这种情况非常困惑,我感觉非常糟糕自己感谢帮助无论如何。祝你有愉快的一天

1 个答案:

答案 0 :(得分:0)

使用没有webView的Javascript来发出请求!

问题已经回答here in this question

  

javax.script包不是Android SDK的一部分。您可以在WebView中执行JavaScript,如here所述。您可以使用Rhino,如here所述。您还可以查看Scripting Layer for Android项目。

也是一个类似的question was asked here

  

您可以在没有WebView的情况下执行JavaScript。您可以使用AndroidJSCore。以下是如何执行此操作的快速示例:

HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://your_website_here/file.js");
HttpResponse response = client.execute(request);
String js = EntityUtils.toString(response.getEntity());

JSContext context = new JSContext();
context.evaluateScript(js);
context.evaluateScript("question.vote(0);");

然而,这很可能不会在WebView之外工作,因为我认为你不仅依赖于JavaScript,而且还依赖于AJAX,它不是纯JavaScript的一部分。它需要一个浏览器实现。

您是否有理由不使用隐藏的WebView并只是注入代码?

// Create a WebView and load a page that includes your JS file
webView.evaluateJavascript("question.vote(0);", null); 

否则:

是的,您可以在不使用POST的情况下发出HTTP GET和HTTP WebView请求。但是,如果您想使用webView,请记住默认情况下webview中的Javascript被禁用(出于安全目的)。因此,在调用任何javascript函数之前,请确保在webview中启用javascript,如此

   webView.getSettings().setJavaScriptEnabled( true );

然后在您的webView中启用javascript。 但是如果你不想使用webview和javascript来发出http请求。您可以在xml的活动布局中定义Button的替代方法。并在按钮Clicked listener上响应http请求!

另外请记住,使用Android / Java默认类创建http请求是一项艰巨的任务,并且容易出错,并且需要您关注使用异步任务以避免阻止UI线程。

替代地

在android中我们使用现成的库来发出http请求。 Google有一个名为Volley的好图书馆。它很容易定制,响应错误并自动从主线程发出请求。See more explanation here!。如果下面还有一些问题评论!