互換性のないつまり、ではないオリジナルの作者に時間のおかげで多くを費やし、FFと互換性がありません。
背景
プロジェクトの開発プロセスでは、輸出需要の絵は、多くの場合、ダウンロードにグラフをエクスポートする必要があり、特にチャートなどを使用したアプリケーションのために、しばしばあります。
ダウンロードはChromeと他の現代のブラウザでbase64で絵を達成比較的簡単です。
- ラベルaを作成します。
- base64エンコードの画像に割り当てられたタグのhref属性
- ダウンロードしたファイルの名前として、ラベルのダウンロードプロパティを指定します
- トリガクリックイベントタグ
しかし、このロジックはIEでは動作しません、直接のエラーを書きました。
次のIEは別途に対処する必要があるので、ここではIEような文書を扱う単一の方法を提供する:window.navigator.msSaveOrOpenBlob(ブロブ、download_filename)直接IEのダウンロードをトリガすることができ、このメソッドを呼び出すと、それは非常に簡単です。具体的には、以下:
(BASE64画像/ PNG:データこのセクションのようなマイナスの前述の説明は、データコンテンツインターセプト// BASE64 ) とバイナリデータに復号 VAR BSTR = ATOB(imgUrl.split( ' ')[1 ]) //バイナリデータは、後続のコンテナを作成するために、復号されたバイナリデータの長さを取得 VARが= N-bstr.length バイナリデータストアにアレイのUint8Arrayタイプを作成// (N)=新しい新しいUint8Array u8arr VARを //バイナリUint8Array配列データ・タイプ ながら(N--){ u8arr [N- = bstr.charCodeAt(N) } //ブロブ作成 VARを=新しい新しいブロブブロブ([u8arr]) //ブラウザがメソッドを呼び出し、ダウンロードプロセスIE呼び出す window.navigator.msSaveOrOpenBlob(ブロブを、 'チャート・ダウンロード ' + '' + 'PNG')
//ここにコードをbase64エンコードに全体像を取得することで、ここでは効果のconst imgUrl =見て、自分自身をテストするために、ここで符号化された画像の交換であることを、カザフスタンの一例である「データを:画像/ PNG; base64で、...」
ブラウザが(IEブラウザを使用する場合、ある)msSaveOrOpenBlob方法をサポートしている場合//、次にダウンロード画像にメソッドを呼び出す (window.navigator.msSaveOrOpenBlob){IF VAR = BSTR ATOB(imgUrl.split( '')[1 ]) VAR = N-bstr.lengthの 新しい新Uint8Array u8arr VAR =(N-) 、一方(N--){ u8arr [N- = bstr.charCodeAt(N) } VAR =新しい新しいBLOB BLOB([u8arr]) window.navigator.msSaveOrOpenBlob (BLOB、 'チャート・ダウンロード' + '' + 'PNG') }他{ //ここで処理された新しいブラウザクロムに従ってなど のconst A =のdocument.createElement( 'A') a.href = URL.createObjectURL (BLOB); // imgUrlため a.setAttribute( 'ダウンロード'、 'チャート・ダウンロード') //a.click() a.dispatchEvent(MouseEventの新しい新しい( 'クリックして' {泡:trueの場合、ビューに:、真の解約に:ウィンドウ})); //互換性のFirefox
}
互換性のないつまり、ではないオリジナルの作者に時間のおかげで多くを費やし、FFと互換性がありません。
<IMG名= "PIC1" /> の<input type = "ボタン"値= "下载" onclickの= "ダウンロード( 'IMG1')"> <スクリプト> VAR RET =」/ 9J / 4AAQSkZJRgABAQAAAQABAAD / 2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJ C4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL / 2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL /
wAARCAB + AGYDASIAAhEBAxEB / 8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL / 8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0K
xwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDx
MXGx8jJytLT1NXW19jZ2uHi4 Tl5ufo6erx8vP09fb3 + + PN6 / 8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL / 8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBU
QdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqK
mqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3 + PN6 / 9oADAMBAAIRAxEAPwD36iiigAooryj4k / FO + HLmTSNFjSXUFAMk7EMkee2Ac7v8QfagTdj1Ka5t7
fHnzxRZ6b3C5 / Ouf1zx / wCGPDyn7fq8AkAB8qJvMcg9wo5r5K1TWdR1Wdpr + 8nuZCS2ZXJxnrgdAPYUzS4BcXDJIPl2MR9cUrk8x77e / tA6HBftHbafd3NqpA80AKT9Aa7XRfiR "; document.allの[ 'PIC1'] SRC = "データ:画像/ JPG、BASE64、" + RET; //下载图片 機能ダウンロードは、(){ imgData =う"データ:画像/ JPGと、BASE64、" + RET; this.downloadFile( '测试.PNG'、imgData); } //下载 機能downloadFile(ファイル名、コンテンツ){ ALINK =文書を聞かせています。createElement( 'A'); BLOB = this.base64ToBlob LET(コンテンツ); //新しい新しいブロブ([内容]); のlet EVT = document.createEvent( "HTMLEvents"); evt.initEvent( "クリック"、真の、真の); // initEventなしFFで後者の二つのパラメータ、ブラウザのデフォルトの動作を防止するかどうか、バブリングするかどうか、イベントの種類を文句を言うだろう aLink.download =ファイル名を、 aLink.href = URL.createObjectURL(BLOB); // aLink.dispatchEvent(EVT) のALink .click() } // Base64でターンBLOBの 関数base64ToBlob(コード){ LET部分が= code.split( '; Base64で、'); せて部品のcontentType = [0] .split( ':')[1]; せRAW window.atob =(パーツ[1]); LET rawLength = raw.length; 聞かせてuInt8Array =新しいUint8Array(rawLength)。 {(; I <rawLength ++ iが0 =せて)ため uInt8Array [I] = raw.charCodeAt(I)。 } 新しいブロブ([uInt8Array]、{タイプ:のcontentTypeを})を返します。 } </ SCRIPT>
リファレンス
https://www.jb51.net/article/147431.htm