6

我有一个特定的要求,我必须从我的活动中触发浏览器上的 url。我可以使用以下代码做到这一点:

String finalUrl = "http://localhost:7001/display/result.jsp?param=12345";
Intent browserIntent = new Intent(android.content.Intent.ACTION_VIEW,
                        Uri.parse(finalUrl));

现在,我想通过在请求中将“param”作为请求标头而不是作为 queryString 本身传递来调用 result.jsp。

有人可以请教吗?

非常感谢提前

编辑 即使是请求正文中带有“参数”的 POST 请求也应该没问题。

编辑 2 接受的答案是针对 POST 请求,而不是针对标头。

4

1 回答 1

14

Android 浏览器支持“查看”javascript,例如以下代码可以启动浏览器应用程序以显示警报对话框:

    String finalUrl = "javascript:alert('hello')";
    Intent browserIntent = new Intent(android.content.Intent.ACTION_VIEW,
                            Uri.parse(finalUrl));
    startActivity(browserIntent);

通过 javascript 进行 post 操作的一个常见技巧是您通过 javascript 创建一个表单,然后提交它。所以理论上像下面这样的代码应该可以工作(部分代码是从这篇文章中复制的):

    //String finalUrl = "http://localhost:7001/display/result.jsp?param=12345";
    String finalUrl = "javascript:" + 
        "var to = 'http://localhost:7001/display/result.jsp';" +
        "var p = {param:'12345',param2:'blablabla',param3:'whatever'};"+
        "var myForm = document.createElement('form');" +
        "myForm.method='post' ;" +
        "myForm.action = to;" +
        "for (var k in p) {" +
            "var myInput = document.createElement('input') ;" +
            "myInput.setAttribute('type', 'text');" +
            "myInput.setAttribute('name', k) ;" +
            "myInput.setAttribute('value', p[k]);" +
            "myForm.appendChild(myInput) ;" +
        "}" +
        "document.body.appendChild(myForm) ;" +
        "myForm.submit() ;" +
        "document.body.removeChild(myForm) ;";
    Intent browserIntent = new Intent(android.content.Intent.ACTION_VIEW,
                            Uri.parse(finalUrl));
    startActivity(browserIntent);
于 2012-10-15T08:38:40.317 回答