2011-08-23 14 views
3

私はこのボタンをクリックするとブラウザを閉じます(現在のタブではなくAndroidブラウザの "ブラウザ")。 IE、Firefox、Chromeなど)。Javascriptを使用してAndroidブラウザを閉じることはできますか?

私は検索して、方法:window.close()を見つけましたが、IEでのみ動作するようです。
私の質問は:

Javascriptを使用してAndroidブラウザを閉じる方法はありますか?

+2

現在のページ/タブのみを閉じます。モバイルブラウザでタブを閉じるかどうかはわかりませんが、確かに標準のブラウザで動作します – FRAGA

+1

どうしたらいいですか?ユーザーとしては、ブラウザを閉じようとしたウェブサイトがすぐに嫌いです。 – Dunes

+0

@Dunesええ、私もそれをやりたくありません。しかし、私のクライアントは欲しい。そして、この機能を実装すべきではないことを伝える前に。私はすべての可能な答えを最初に見つけたい – sees

答えて

4

いいえ、それは良いことです:ウェブページはブラウザ自体にビジネスを混乱させることはありません(「待って、私のウィンドウはどこに行きましたか?そこには30のタブがありました。明白な脆弱性:

  1. それはちょうどlegitpage.example.com
  2. のように見えた、ポップアンダーevilpage.example.netのウィンドウを開き、アクティブになるときlegitpage.example.com
  3. にXSSを挿入
  4. close legitpage.example.com(& 3が十分に速い場合、xeがまだlegitpage.example.comにあることに騙されている可能性があります)
  5. ???
  6. 利益!
+0

確認のお礼あり – sees

+0

@sees:よろしくお願いします。 – Piskvor

+1

(Androidでは、ブラウザアクティビティがスタックからポップされ、別のアクティビティがアクティブになるという予期しない副作用があることに注意してください) – Piskvor

4

これは不可能ではありません。

0

AndroidブラウザでJavaScriptをポップアップウィンドウで閉じることができます。したがって、ポップアップウィンドウとして作成されていない限り、ウィンドウを閉じる方法はありません。

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 web p彼らはあなたのAndroidのJavaコードに必要なのは何をするのをあなたは同様に他のボタンとコールバックを追加することができ

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

:年齢は次のコードで、「閉じる」ボタンを持つことができます。他の方法を呼び出し - JavaからJavaScriptにページ上で、例えば、も可能です。

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

また、あなたが覚えている、あなたのWebViewコントロールでは、インターネットではなく、ローカルファイルまたは文字列からのコンテンツを表示する場合AndroidManifestに追加します。XMLに必要な権限:

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

グレッグ

0

window.close()は、実際には(クロームベータ版での)ホーム画面に追加されたウェブアプリのために動作します。

アプリをきれいに閉じてホーム画面に戻ります。

関連する問題