Можно ли использовать Javascript для закрытия Android-браузера?

Я хочу поместить кнопку «закрыть» на веб-странице (наш клиент хочет это сделать)
И когда я нажимаю эту кнопку, я хочу закрыть браузер (не текущую вкладку, а «браузер» в Android-браузере, IE, Firefox, Chrome и т. Д.).

Я искал и нашел метод: window.close() но, похоже, работает только с IE.
Мой вопрос:

Есть ли способ закрыть браузер Android с помощью Javascript?

Nope – и это хорошая вещь: на веб-странице нет деловых сообщений с самим браузером («подождите, где мое окно прошло? У меня было 30 вкладок там – poof, ушел!»), Не говоря уже о вопиющей уязвимости:

  1. Вставьте XSS в файл legalpage.example.com
  2. Когда он активируется, откройте всплывающее окно evilpage.example.net, которое выглядит так же, как legalpage.example.com
  3. Закройте lawpage.example.com (если 2 и 3 достаточно быстры, пользователь может быть обманут, что xe все еще находится на сайте legalpage.example.com)
  4. ???
  5. Прибыль!

Это невозможно, и никогда не будет.

Ну, простая работа для этого заключалась бы в создании активности с полноэкранным 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> 

Вы можете добавить, а также другие кнопки и обратные вызовы для них, чтобы сделать то, что необходимо в вашем коде Java Java. Вызывает другой способ – от Java до JavaScript на странице, также возможны, например:

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

Кроме того, если вы хотите отображать контент из Интернета, а не локальный файл или строку в вашем элементе управления WebView, не забудьте добавить в AndroidManifest.xml необходимое разрешение:

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

Greg

Браузер Android позволяет JavaScript закрывать только всплывающие окна. Следовательно, нет возможности закрыть окно, если оно не было создано как всплывающее окно.

window.close() фактически работает для веб-приложений, которые были добавлены на главный экран (с Chrome Beta).

Он чисто закрывает приложение и возвращается на главный экран.