[{"data":1,"prerenderedAt":899},["ShallowReactive",2],{"content-/chrome-downloads-api-profile-issue":3,"all-pages-for-dir":878,"related-/chrome-downloads-api-profile-issue":879,"og-image-/chrome-downloads-api-profile-issue":898},{"id":4,"title":5,"body":6,"category":862,"concepts":863,"description":864,"extension":865,"meta":866,"navigation":664,"ogImage":863,"path":867,"project_name":863,"published":868,"publishedAt":869,"seo":870,"source":871,"stem":872,"tags":873,"todo":876,"unpublished":868,"updatedAt":863,"__hash__":877},"pages/2026-01/2026-01-22/chrome-downloads-api-profile-issue.md","Chrome拡張機能のchrome.downloads APIでファイル名が無視される問題とプロファイル設定の関係",{"type":7,"value":8,"toc":840},"minimark",[9,13,17,34,40,46,52,55,61,178,181,191,194,205,212,215,220,223,237,247,251,254,262,265,269,276,279,291,296,300,307,312,318,323,329,332,336,343,346,356,359,368,372,378,381,398,416,419,422,426,429,507,510,519,562,566,572,575,580,786,793,796,827,830,836],[10,11,5],"h1",{"id":12},"chrome拡張機能のchromedownloads-apiでファイル名が無視される問題とプロファイル設定の関係",[14,15,16],"h2",{"id":16},"結論",[18,19,20,24,25,28,29,33],"p",{},[21,22,23],"code",{},"chrome.downloads.download"," APIで ",[21,26,27],{},"filename"," パラメータを指定しても無視され、「ダウンロード」というファイル名になる問題は、",[30,31,32],"strong",{},"Google Workspace管理プロファイル","が原因である可能性が高い。",[18,35,36,39],{},[21,37,38],{},"chrome://settings"," の上部に「お使いのプロフィールは ○○.com によって管理されています」と表示されるプロファイルでは、組織のセキュリティポリシーによって拡張機能の一部機能が制限されることがある。",[18,41,42,45],{},[30,43,44],{},"回避策",": 管理されていない個人プロファイルを使用する。",[18,47,48,51],{},[30,49,50],{},"注意",": これは相関関係に基づく仮説であり、根本原因は特定できていない。管理プロファイルと非管理プロファイルで挙動が異なることは確認したが、具体的にどのポリシーや設定が影響しているかは不明。",[14,53,54],{"id":54},"問題の状況",[18,56,57,58,60],{},"Chrome拡張機能で ",[21,59,23],{}," APIを使用してCSVファイルをダウンロードする機能を実装した。",[62,63,68],"pre",{"className":64,"code":65,"language":66,"meta":67,"style":67},"language-javascript shiki shiki-themes vitesse-light vitesse-light","chrome.downloads.download({\n    url: dataUrl,\n    filename: 'MF_meisai/2026-01-22/test_file.csv',\n    saveAs: false\n}, (downloadId) => {\n    // ...\n});\n","javascript","",[21,69,70,95,111,132,144,165,172],{"__ignoreMap":67},[71,72,75,79,83,86,88,92],"span",{"class":73,"line":74},"line",1,[71,76,78],{"class":77},"s4oTP","chrome",[71,80,82],{"class":81},"shFtX",".",[71,84,85],{"class":77},"downloads",[71,87,82],{"class":81},[71,89,91],{"class":90},"senZ8","download",[71,93,94],{"class":81},"({\n",[71,96,98,102,105,108],{"class":73,"line":97},2,[71,99,101],{"class":100},"sz8Xr","    url",[71,103,104],{"class":81},":",[71,106,107],{"class":77}," dataUrl",[71,109,110],{"class":81},",\n",[71,112,114,117,119,123,127,130],{"class":73,"line":113},3,[71,115,116],{"class":100},"    filename",[71,118,104],{"class":81},[71,120,122],{"class":121},"sMJiu"," '",[71,124,126],{"class":125},"sdGka","MF_meisai/2026-01-22/test_file.csv",[71,128,129],{"class":121},"'",[71,131,110],{"class":81},[71,133,135,138,140],{"class":73,"line":134},4,[71,136,137],{"class":100},"    saveAs",[71,139,104],{"class":81},[71,141,143],{"class":142},"sHkkW"," false\n",[71,145,147,150,153,156,159,162],{"class":73,"line":146},5,[71,148,149],{"class":81},"},",[71,151,152],{"class":81}," (",[71,154,155],{"class":77},"downloadId",[71,157,158],{"class":81},")",[71,160,161],{"class":81}," =>",[71,163,164],{"class":81}," {\n",[71,166,168],{"class":73,"line":167},6,[71,169,171],{"class":170},"sxvE3","    // ...\n",[71,173,175],{"class":73,"line":174},7,[71,176,177],{"class":81},"});\n",[18,179,180],{},"期待する動作：",[182,183,184],"ul",{},[185,186,187,190],"li",{},[21,188,189],{},"Downloads/MF_meisai/2026-01-22/test_file.csv"," に保存される",[18,192,193],{},"実際の動作：",[182,195,196,202],{},[185,197,198,201],{},[21,199,200],{},"Downloads/ダウンロード.csv"," として保存される",[185,203,204],{},"サブフォルダも作成されない",[18,206,207],{},[208,209],"img",{"alt":210,"src":211},"ファイル名が無視される","/2026-01/2026-01-22/images/download-filename-ignored.png",[14,213,214],{"id":214},"調査の経緯",[216,217,219],"h3",{"id":218},"_1-コードの問題を疑う","1. コードの問題を疑う",[18,221,222],{},"最初はコードの問題だと考え、以下を試した：",[182,224,225,228,231,234],{},[185,226,227],{},"Data URLの作成方法を変更（Base64エンコード → FileReader.readAsDataURL）",[185,229,230],{},"MIMEタイプの変更（text/csv → text/tab-separated-values）",[185,232,233],{},"BOMの有無を変更",[185,235,236],{},"フォルダ名から日本語を除去",[18,238,239,242,243,246],{},[30,240,241],{},"結果",": すべて効果なし。",[21,244,245],{},"success: true"," が返るのにファイル名は「ダウンロード」のまま。",[216,248,250],{"id":249},"_2-別の拡張機能との比較","2. 別の拡張機能との比較",[18,252,253],{},"同じマシンで動作している別の拡張機能（Koyfin版）では、同じAPIでサブフォルダ作成・ファイル名指定が正常に動作していた。",[62,255,260],{"className":256,"code":258,"language":259},[257],"language-text","C:\\Users\\numbe\\Downloads\\koyfin-data\\2026-01-22\\AAPL_20260122.tsv\n","text",[21,261,258],{"__ignoreMap":67},[18,263,264],{},"コードを比較したが、ほぼ同一だった。",[216,266,268],{"id":267},"_3-プロファイルの違いを発見","3. プロファイルの違いを発見",[18,270,271,272,275],{},"Koyfin版を使用する際は",[30,273,274],{},"別のChromeプロファイル","を使用していることに気づいた。",[18,277,278],{},"テスト：",[182,280,281,284],{},[185,282,283],{},"動くプロファイルでMF_明細全取得のテストボタンを押す",[185,285,286,287,290],{},"→ ",[21,288,289],{},"MF_test/2026-01-22/test_file.tsv"," が正常に作成された",[18,292,293],{},[30,294,295],{},"同じコードでも、プロファイルによって挙動が異なることが判明。",[216,297,299],{"id":298},"_4-プロファイル設定の比較","4. プロファイル設定の比較",[18,301,302,303,306],{},"両方のプロファイルで ",[21,304,305],{},"chrome://settings/downloads"," を確認した。",[18,308,309],{},[30,310,311],{},"動かないプロファイル:",[18,313,314],{},[208,315],{"alt":316,"src":317},"動かないプロファイルの設定","/2026-01/2026-01-22/images/download-settings-off.png",[18,319,320],{},[30,321,322],{},"動くプロファイル:",[18,324,325],{},[208,326],{"alt":327,"src":328},"動くプロファイルの設定","/2026-01/2026-01-22/images/download-settings-on.png",[18,330,331],{},"「完了したらダウンロードを表示する」の設定が違ったが、これを変更しても問題は解決しなかった。",[216,333,335],{"id":334},"_5-google-workspace管理プロファイルの発見","5. Google Workspace管理プロファイルの発見",[18,337,338,339,342],{},"動かないプロファイルの設定画面をよく見ると、「",[30,340,341],{},"お使いのプロフィールは ○○.com によって管理されています","」という表示があった。",[18,344,345],{},"これはGoogle Workspaceの組織によって管理されているプロファイルであることを示している。管理プロファイルでは、組織のセキュリティポリシーによって拡張機能の動作が制限されることがある。",[18,347,348,349],{},"参考: ",[350,351,355],"a",{"href":352,"rel":353},"https://support.google.com/chrome/answer/9281740",[354],"nofollow","Chrome ブラウザが管理されているかどうか確認する - Google Chromeヘルプ",[14,357,358],{"id":358},"原因",[18,360,361,362,364,365,367],{},"Google Workspace管理プロファイルでは、",[21,363,23],{}," APIの ",[21,366,27],{}," パラメータが無視される。",[216,369,371],{"id":370},"chromepolicy-の確認","chrome://policy の確認",[18,373,374,377],{},[21,375,376],{},"chrome://policy"," で適用されているポリシーを確認した。",[18,379,380],{},"適用されていた主なポリシー:",[182,382,383,386,389,392,395],{},[185,384,385],{},"ChromeDataRegionSetting",[185,387,388],{},"GenAiDefaultSettings",[185,390,391],{},"SafeBrowsingProtectionLevel",[185,393,394],{},"UserSecurityAuthenticatedReporting",[185,396,397],{},"UserSecuritySignalsReporting",[18,399,400,403,404,407,408,411,412,364,414,367],{},[30,401,402],{},"注目すべき点",": ",[21,405,406],{},"DownloadRestrictions"," や ",[21,409,410],{},"DownloadDirectory"," などのダウンロード関連ポリシーは明示的に設定されていない。にもかかわらず、",[21,413,23],{},[21,415,27],{},[18,417,418],{},"これは、管理プロファイル自体に何らかの暗黙的な制限があるか、またはChrome側で管理プロファイルに対して適用されるデフォルトの制限が存在する可能性がある。",[14,420,421],{"id":421},"技術的背景",[216,423,425],{"id":424},"chromedownloadsdownload-api","chrome.downloads.download API",[18,427,428],{},"Chrome拡張機能でファイルをダウンロードするためのAPI。",[62,430,432],{"className":64,"code":431,"language":66,"meta":67,"style":67},"chrome.downloads.download({\n    url: 'data:text/csv;base64,...',  // Data URL\n    filename: 'subfolder/filename.csv', // サブフォルダ指定可能\n    saveAs: false  // 保存ダイアログを表示しない\n}, callback);\n",[21,433,434,448,467,485,497],{"__ignoreMap":67},[71,435,436,438,440,442,444,446],{"class":73,"line":74},[71,437,78],{"class":77},[71,439,82],{"class":81},[71,441,85],{"class":77},[71,443,82],{"class":81},[71,445,91],{"class":90},[71,447,94],{"class":81},[71,449,450,452,454,456,459,461,464],{"class":73,"line":97},[71,451,101],{"class":100},[71,453,104],{"class":81},[71,455,122],{"class":121},[71,457,458],{"class":125},"data:text/csv;base64,...",[71,460,129],{"class":121},[71,462,463],{"class":81},",",[71,465,466],{"class":170},"  // Data URL\n",[71,468,469,471,473,475,478,480,482],{"class":73,"line":113},[71,470,116],{"class":100},[71,472,104],{"class":81},[71,474,122],{"class":121},[71,476,477],{"class":125},"subfolder/filename.csv",[71,479,129],{"class":121},[71,481,463],{"class":81},[71,483,484],{"class":170}," // サブフォルダ指定可能\n",[71,486,487,489,491,494],{"class":73,"line":134},[71,488,137],{"class":100},[71,490,104],{"class":81},[71,492,493],{"class":142}," false",[71,495,496],{"class":170},"  // 保存ダイアログを表示しない\n",[71,498,499,501,504],{"class":73,"line":146},[71,500,149],{"class":81},[71,502,503],{"class":77}," callback",[71,505,506],{"class":81},");\n",[216,508,509],{"id":509},"権限設定",[18,511,512,515,516,518],{},[21,513,514],{},"manifest.json"," に ",[21,517,85],{}," 権限が必要：",[62,520,524],{"className":521,"code":522,"language":523,"meta":67,"style":67},"language-json shiki shiki-themes vitesse-light vitesse-light","{\n    \"permissions\": [\"downloads\"]\n}\n","json",[21,525,526,531,557],{"__ignoreMap":67},[71,527,528],{"class":73,"line":74},[71,529,530],{"class":81},"{\n",[71,532,533,537,540,543,545,548,550,552,554],{"class":73,"line":97},[71,534,536],{"class":535},"sqvqQ","    \"",[71,538,539],{"class":100},"permissions",[71,541,542],{"class":535},"\"",[71,544,104],{"class":81},[71,546,547],{"class":81}," [",[71,549,542],{"class":121},[71,551,85],{"class":125},[71,553,542],{"class":121},[71,555,556],{"class":81},"]\n",[71,558,559],{"class":73,"line":113},[71,560,561],{"class":81},"}\n",[216,563,565],{"id":564},"data-urlの制限","Data URLの制限",[18,567,568,569,571],{},"Data URLを使用する場合、Chromeのバージョンやセキュリティ設定によって ",[21,570,27],{}," が無視されることがあるという報告がある。ただし、今回はプロファイル間で挙動が異なるため、この説明だけでは不十分。",[14,573,574],{"id":574},"代替手段",[18,576,577,579],{},[21,578,23],{}," が動作しない場合のフォールバック：",[62,581,583],{"className":64,"code":582,"language":66,"meta":67,"style":67},"// Blob URL + anchor click方式\nconst blob = new Blob([content], { type: 'text/csv;charset=utf-8' });\nconst url = URL.createObjectURL(blob);\n\nconst a = document.createElement('a');\na.href = url;\na.download = filename;  // ファイル名は指定可能\ndocument.body.appendChild(a);\na.click();\n\nURL.revokeObjectURL(url);\n",[21,584,585,590,635,660,666,693,709,728,750,763,768],{"__ignoreMap":67},[71,586,587],{"class":73,"line":74},[71,588,589],{"class":170},"// Blob URL + anchor click方式\n",[71,591,592,596,599,602,605,608,611,614,617,620,623,625,627,630,632],{"class":73,"line":97},[71,593,595],{"class":594},"stQ0i","const",[71,597,598],{"class":77}," blob",[71,600,601],{"class":81}," =",[71,603,604],{"class":594}," new",[71,606,607],{"class":90}," Blob",[71,609,610],{"class":81},"([",[71,612,613],{"class":77},"content",[71,615,616],{"class":81},"],",[71,618,619],{"class":81}," {",[71,621,622],{"class":100}," type",[71,624,104],{"class":81},[71,626,122],{"class":121},[71,628,629],{"class":125},"text/csv;charset=utf-8",[71,631,129],{"class":121},[71,633,634],{"class":81}," });\n",[71,636,637,639,642,644,647,649,652,655,658],{"class":73,"line":113},[71,638,595],{"class":594},[71,640,641],{"class":77}," url",[71,643,601],{"class":81},[71,645,646],{"class":77}," URL",[71,648,82],{"class":81},[71,650,651],{"class":90},"createObjectURL",[71,653,654],{"class":81},"(",[71,656,657],{"class":77},"blob",[71,659,506],{"class":81},[71,661,662],{"class":73,"line":134},[71,663,665],{"emptyLinePlaceholder":664},true,"\n",[71,667,668,670,673,675,678,680,683,685,687,689,691],{"class":73,"line":146},[71,669,595],{"class":594},[71,671,672],{"class":77}," a",[71,674,601],{"class":81},[71,676,677],{"class":77}," document",[71,679,82],{"class":81},[71,681,682],{"class":90},"createElement",[71,684,654],{"class":81},[71,686,129],{"class":121},[71,688,350],{"class":125},[71,690,129],{"class":121},[71,692,506],{"class":81},[71,694,695,697,699,702,704,706],{"class":73,"line":167},[71,696,350],{"class":77},[71,698,82],{"class":81},[71,700,701],{"class":77},"href",[71,703,601],{"class":81},[71,705,641],{"class":77},[71,707,708],{"class":81},";\n",[71,710,711,713,715,717,719,722,725],{"class":73,"line":174},[71,712,350],{"class":77},[71,714,82],{"class":81},[71,716,91],{"class":77},[71,718,601],{"class":81},[71,720,721],{"class":77}," filename",[71,723,724],{"class":81},";",[71,726,727],{"class":170},"  // ファイル名は指定可能\n",[71,729,731,734,736,739,741,744,746,748],{"class":73,"line":730},8,[71,732,733],{"class":77},"document",[71,735,82],{"class":81},[71,737,738],{"class":77},"body",[71,740,82],{"class":81},[71,742,743],{"class":90},"appendChild",[71,745,654],{"class":81},[71,747,350],{"class":77},[71,749,506],{"class":81},[71,751,753,755,757,760],{"class":73,"line":752},9,[71,754,350],{"class":77},[71,756,82],{"class":81},[71,758,759],{"class":90},"click",[71,761,762],{"class":81},"();\n",[71,764,766],{"class":73,"line":765},10,[71,767,665],{"emptyLinePlaceholder":664},[71,769,771,774,776,779,781,784],{"class":73,"line":770},11,[71,772,773],{"class":77},"URL",[71,775,82],{"class":81},[71,777,778],{"class":90},"revokeObjectURL",[71,780,654],{"class":81},[71,782,783],{"class":77},"url",[71,785,506],{"class":81},[18,787,788,789,792],{},"この方式ではファイル名は正しく設定されるが、",[30,790,791],{},"サブフォルダの指定はできない","。",[14,794,795],{"id":795},"まとめ",[182,797,798,805,808,814,817,824],{},[185,799,800,364,802,804],{},[21,801,23],{},[21,803,27],{}," パラメータが無視される問題が発生",[185,806,807],{},"同じコードでもChromeプロファイルによって挙動が異なる",[185,809,810,813],{},[30,811,812],{},"原因はGoogle Workspace管理プロファイル","である可能性が高い",[185,815,816],{},"管理プロファイルでは組織のセキュリティポリシーにより拡張機能の一部機能が制限される",[185,818,819,820,823],{},"解決策は",[30,821,822],{},"管理されていない個人プロファイルを使用する","こと",[185,825,826],{},"または、フォールバックとしてBlob URL + anchor click方式を使用（ただしサブフォルダ指定不可）",[14,828,829],{"id":829},"教訓",[18,831,832,833,835],{},"Chrome拡張機能の開発・テスト時は、使用しているプロファイルが管理プロファイルかどうかを確認すること。",[21,834,38],{}," の上部に「○○によって管理されています」と表示されている場合、一部のAPIが制限される可能性がある。",[837,838,839],"style",{},"html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html pre.shiki code .sHkkW, html code.shiki .sHkkW{--shiki-default:#1E754F;--shiki-dark:#1E754F}html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sqvqQ, html code.shiki .sqvqQ{--shiki-default:#99841877;--shiki-dark:#99841877}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}",{"title":67,"searchDepth":97,"depth":97,"links":841},[842,843,844,851,854,859,860,861],{"id":16,"depth":97,"text":16},{"id":54,"depth":97,"text":54},{"id":214,"depth":97,"text":214,"children":845},[846,847,848,849,850],{"id":218,"depth":113,"text":219},{"id":249,"depth":113,"text":250},{"id":267,"depth":113,"text":268},{"id":298,"depth":113,"text":299},{"id":334,"depth":113,"text":335},{"id":358,"depth":97,"text":358,"children":852},[853],{"id":370,"depth":113,"text":371},{"id":421,"depth":97,"text":421,"children":855},[856,857,858],{"id":424,"depth":113,"text":425},{"id":509,"depth":113,"text":509},{"id":564,"depth":113,"text":565},{"id":574,"depth":97,"text":574},{"id":795,"depth":97,"text":795},{"id":829,"depth":97,"text":829},"dev",null,"chrome.downloads.download APIでfilenameやサブフォルダ指定が無視され「ダウンロード.csv」になる問題を調査。Chromeのプロファイル設定が原因の可能性が判明。","md",{},"/chrome-downloads-api-profile-issue",false,"2026-01-22T00:00:00.000Z",{"title":5,"description":864},"make-diary","2026-01/2026-01-22/chrome-downloads-api-profile-issue",[874,66,875],"chrome-extension","troubleshooting","done","5HWUYxjlpJBOZ12Dr6-RnNToaltTK39D8T_HJklkPtI",[],[880,884,888,891,894],{"title":881,"path":882,"publishedAt":883},"会計ソフトA内部APIハンズオン3記事のスタイル統一と実機検証","/mf-internal-api-handson-live-verification","2026-06-21T00:00:00.000Z",{"title":885,"path":886,"publishedAt":887},"IIFE（即時実行関数式）とは何か ― なぜ昔は使われ、今ES Modules時代に減ったのか","/iife-immediately-invoked-function-expression","2026-06-09T00:00:00.000Z",{"title":889,"path":890,"publishedAt":887},"Number.isFinite と isFinite の違い ― JavaScript で「有限の数か」を判定する正しい書き方","/number-isfinite-explained",{"title":892,"path":893,"publishedAt":887},"厳密等価演算子（===）と等価演算子（==）の違い ― JavaScript で == を使わない方がいい理由","/strict-equality-vs-loose-equality",{"title":895,"path":896,"publishedAt":897},"Claude Code のフック音声・Codex GPT-5.5 ロールアウト・ffmpeg NVENC 廃止オプションのトラブル対応","/env-troubles-sound-gpt55-nvenc","2026-04-24T00:00:00.000Z","https://log.eurekapu.com/og/blog/chrome-downloads-api-profile-issue.png?v=2026-01-22T00%3A00%3A00.000Z&title=Chrome%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD%E3%81%AEchrome.downloads%20API%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%8C%E7%84%A1%E8%A6%96%E3%81%95%E3%82%8C%E3%82%8B%E5%95%8F%E9%A1%8C%E3%81%A8%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E8%A8%AD%E5%AE%9A%E3%81%AE%E9%96%A2%E4%BF%82&author=Kei%20Komatsu&sig=f5f0ed9af3b91dec",1785654721864]