是否可以使用Javascript关闭Android浏览器?

时间:2011-08-23 16:20:13

标签: javascript android browser

我想在网页上放一个“关闭”按钮(我们的客户想要这样做)
当我单击此按钮时,我想关闭浏览器(不是当前选项卡,而是Android浏览器,IE,Firefox,Chrome等中的“浏览器”)。

我已经四处寻找并找到了一种方法:window.close()但似乎只适用于IE 我的问题是:

有没有办法使用Javascript关闭Android浏览器?

5 个答案:

答案 0 :(得分:4)

这是不可能的,也永远不会。

答案 1 :(得分:4)

Nope - 这是一件好事:网页没有乱搞浏览器本身(“等等,我的窗口在哪里?我有30个标签 - 噗,不见了!”),更不用说了明显的漏洞:

  1. 将xSS插入legalpage.example.com
  2. 当它被激活时,打开evilpage.example.net的pop-under窗口,看起来就像legitpage.example.com
  3. close legitpage.example.com(如果2& 3足够快,用户可能会被骗,因为xe仍然在legitpage.example.com上)
  4. ???
  5. 利润!

答案 2 :(得分:1)

Android浏览器允许JavaScript仅关闭弹出窗口。因此,除非已将其创建为弹出窗口,否则无法关闭窗口。

答案 3 :(得分:1)

嗯,一个简单的解决方法是创建一个具有全屏WebView控件的活动,在那里显示你的HTML内容(本地或从互联网),并添加一个按钮来关闭这个窗口,回调到Java关闭此活动。以下是您需要的所有代码:

browser.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:background="#404040"
          android:id="@+id/mainLayout"
    >
    <WebView android:id="@+id/webkit"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_marginBottom="2dp"
         android:layout_weight="1"
         android:scrollbars="vertical"
         android:visibility="visible"
        />

</LinearLayout>

myBrowser.java活动(记得在AndroidManifest.xml中声明它):

public class myBrowser extends Activity {
    protected WebView webView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // if you don't want app title bar...
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.browser);
        webView = (WebView) findViewById(R.id.webkit);
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webView.addJavascriptInterface(new MyJavaCallback(), "JCB");

        // get the URL to navigate to, sent in Intent extra
        Intent intent = getIntent();
        if (intent != null) {
            String sUrl = intent.getStringExtra("url");
            if (sUrl != null)
                webView.loadUrl(sUrl);
        }
    }

    final public class MyJavaCallback {
        // this annotation is required in Jelly Bean and later:
        @JavascriptInterface
        public void finishActivity() {
            finish();
        }
    }
}

在您的应用中的其他位置开始此活动的代码将是:

    Intent intent = new Intent(context, myBrowser.class);
    intent.putExtra("url", "http://www.someaddress.com/somepage.html");
    startActivity(intent);

并且您的somepage.html网页可以有一个“关闭”按钮,其中包含以下代码:

<button onclick="JCB.finishActivity()">Close</button>

您可以添加其他按钮和回调,以便他们执行Android Java代码中所需的操作。调用另一种方式 - 从页面上的Java到JavaScript,也是可能的,例如:

webView.loadUrl("javascript:functionName(params)");

此外,如果要显示来自Internet的内容,而不是WebView控件中的本地文件或字符串,请记住向AndroidManifest.xml添加必要的权限:

<uses-permission android:name="android.permission.INTERNET" />

格雷格

答案 4 :(得分:1)

window.close()实际上适用于添加到主屏幕(使用Chrome测试版)的网络应用。

它干净地关闭应用程序并返回主屏幕。