6

以下のJavaScriptのコードには2つのステップがあります。

ステップ1:.pdf、.doc、.exe、またはhtmlネイティブではないものに移動します。location.hrefがブラウザウィンドウを引き継いだ場合は、手順2を実行する必要はありません(通常、PDFがブラウザウィンドウを引き継ぎます)。他のほとんどのものは、ダウンロードマネージャープロセスを開始します。.exeなど。ただし、Wordドキュメントなど、ブラウザの設定に応じてダウンロードしたり、ブラウザウィンドウに直接表示したりできるものもあります。hef.locationが実行することを実行してほしい。

ステップ2:しかし、そのプロセスが完了した後に.exeなどのファイルをダウンロードしている場合は、ホームページに移動します。

または、ステップ1と2の間に5秒間待つだけの解決策は、ほとんどの場合機能しているようです。ただし、接続速度が遅い場合は、常に機能するとは限りません。次に、最初のhref.location呼び出しを終了せずにホームページに移動し、PDFが表示されることはなく、ホームページのみが表示されます。

参考までに...setTimeOutでラップしている理由は、このFirefoxの問題に関連しています。 Stack Overflow:864633assigning-to-document-location-href-without-clobbering-history

私の質問: location.hrefプロセスがいつ完了したかを知る方法はありますか?

<script language="JavaScript"><!--
function windowOnLoad() {
    setTimeout(function(){
       location.href='/someurl/something.pdf';  //sometimes this is .doc file
    },0);
    setTimeout(function(){
       location.href='/homepage';
    },5000);
    return false;
}
//-->
</script>
4

3 に答える 3

2

JavaScriptであなたが求めていることを行うことは不可能だと思います。window.locationに何かを設定すると、基本的に、現在のウィンドウに指定されたURLをロードするようにブラウザに指示します。ブラウザがそれを行うと、前のページのすべてのコードが動作しなくなります。

これが私の頭のてっぺんからのいくつかの可能性です:

  • ポップアップまたは新しいウィンドウで外部ファイルをロードします。私はそれを試したことがないので、すべてのブラウザでどのように機能するかわかりません。
  • ファイルの提供に使用しているサーバー側の言語を使用してください。その後、ファイルが提供された後、クライアントをリダイレクトすることができます。
于 2009-11-17T21:32:33.937 に答える
1

他の人が述べているように、Javascriptで利用できる「onDownloadComplete」イベントはありません。ただし、ダウンロードの実行中に別の表示を使用できる場合は、次の手法を使用できます。

  1. ページAに、ページBへのリンクがあります
  2. Bページで、ファイルのダウンロード中にユーザーに表示するコンテンツを表示します
  3. ページBの要素内に、実際にダウンロードを開始するMETAタグを追加します。

    <head>
        <meta http-equiv="refresh" content="1;url=http://server.com/document.doc" />
    </head>
    

最終的に、ブラウザは(2)のコンテンツを引き続き表示しますが、[名前を付けて保存...]ダイアログボックスを使用してダウンロードを保存するようにユーザーに促します。

CNetやSourceforgeなどの多くのダウンロードサイトは、同様の手法を使用しています。

于 2009-11-18T08:26:55.310 に答える
0

私が知る限り、2つの選択肢があります

  • ポップアップウィンドウでファイルにリンクし(ブラウザがダウンロード可能なファイルしか見つからない場合は、通常、ブラウザはこれを自分で閉じる必要があります)、同時に宛先ページにリダイレクトします
  • 宛先ページにリンクしてそこでダウンロードを開始する動的関数を組み込みますが、それはあなたの場合には役に立たないかもしれません

純粋なJavaScriptは不可能であり、サーバーサイドスクリプトを介したダウンロードのトンネリングもリダイレクトを処理できません。あなたは私が恐れている間に解決策をとらなければならないでしょう

于 2009-11-19T07:28:07.627 に答える