実現したいこと
ブックマークレット実行中はedge(IEモード)のアラートを表示しないようにしたい。
発生している問題・分からないこと
edge(IEモード)を利用しています。※このモードでしか表示できないブラウザです。
作業効率の確認のために、ブックマークレットを使った方法でテーブルデータを取得してcsvファイルへ出力しているのですが、元々の仕様(JavaScript)でテーブルデータが0件の時にfunctionで関数が呼び出されwebからのメッセージとしてこの担当者はデータがありません。アラートがでるようになっています。
アラートがでてしまうと、ブックマークレットの動作が止まってしまい次の担当者の検索に移りません。
どうにかアラートを無効にする関数などを入れてみたのですが、無効にならずアラートがでてきます。。。
ご教示いただける方がいましたら幸いです。
該当のソースコード
JavaScript(ブックマークレット)
1javascript:(function() { 2 // ファイル入力要素を作成 3 var input = document.createElement('input'); 4 input.type = 'file'; 5 input.accept = '.js'; 6 7 // ファイルが選択されたときの処理 8 input.onchange = function(e) { 9 var file = e.target.files[0]; 10 var reader = new FileReader(); 11 12 // ファイルの読み込みが完了したときの処理 13 reader.onload = function(event) { 14 try { 15 // ファイルの内容を取得 16 var content = event.target.result; 17 // 配列データを抽出 18 var idData = eval(content.substring(content.indexOf('['), content.lastIndexOf(']') + 1)); 19 var allData = ""; 20 21 // データを検索する関数 22 (function search(index) { 23 // インデックスが配列の長さを超えた場合はCSVをダウンロード 24 if (index >= idData.length) { 25 downloadCSV(allData); 26 return; 27 } 28 29 // メッセージフレームのドキュメントを取得 30 var frameDoc = window.frames["custom_frame_1"].document; // IDを変更 31 var customCode = frameDoc.getElementsByName("customCode")[0]; // IDを変更 32 var customName = frameDoc.getElementsByName("customName")[0]; // IDを変更 33 var customButton = frameDoc.getElementsByName("customButton")[0]; // IDを変更 34 35 // フォームが存在する場合 36 if (customCode && customName && customButton) { 37 // 値を設定 38 customCode.value = idData[index][0]; 39 customName.value = idData[index][1]; 40 frameDoc.getElementsByName("customFlag")[0].checked = true; // IDを変更 41 customButton.click(); 42 43 // 結果が返ってくるまでの処理 44 setTimeout(function() { 45 executeBookmarklet2(); 46 var checkResults = setInterval(function() { 47 var frame2Doc = window.frames["custom_frame_2"].document; // IDを変更 48 var rows = frame2Doc.querySelectorAll("[id^='custom_row_']"); // IDを変更 49 50 // 行が存在する場合 51 if (rows.length > 0) { 52 clearInterval(checkResults); 53 Array.prototype.forEach.call(rows, function(row) { 54 // 行データを取得 55 var rowData = Array.prototype.slice.call(row.cells).map(function(cell) { 56 return cell.innerText; 57 }); 58 // CSVデータに追加 59 allData += customName.value.trim() + "," + rowData.slice(2).join(",") + "\n"; 60 }); 61 // 次のインデックスで検索を続ける 62 search(index + 1); 63 } else { 64 clearInterval(checkResults); 65 // 次のインデックスで検索を続ける 66 search(index + 1); 67 } 68 }, 1000); 69 }, 1000); 70 } 71 })(0); 72 } catch (e) { 73 console.error('Error parsing file: ' + e.message); 74 } 75 }; 76 77 // ファイルをテキストとして読み込む 78 reader.readAsText(file); 79 }; 80 81 // ファイル選択ダイアログを開く 82 input.click(); 83 84 // メッセージフレーム2の選択を処理する関数 85 function executeBookmarklet2() { 86 var select = document.getElementsByName('custom_frame_2')[0].contentWindow.document.getElementsByTagName('select')[0]; // IDを変更 87 if (select) { 88 select.selectedIndex = 1; 89 if (typeof select.onchange === 'function') select.onchange(); 90 } 91 } 92 93 // CSVをダウンロードする関数 94 function downloadCSV(csv) { 95 var bom = "\uFEFF"; // UTF-8 BOM 96 var blob = new Blob([bom + csv], { type: 'text/csv;charset=utf-8;' }); 97 98 // IE用の処理 99 if (window.navigator.msSaveBlob) { 100 window.navigator.msSaveBlob(blob, 'data.csv'); 101 } else { 102 var link = document.createElement('a'); 103 link.href = URL.createObjectURL(blob); 104 link.setAttribute('download', 'data.csv'); 105 document.body.appendChild(link); 106 link.click(); 107 document.body.removeChild(link); 108 } 109 } 110})();
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
window.alert = function()
補足
特になし
