如何用javascript操作本地文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用javascript操作本地文件相关的知识,希望对你有一定的参考价值。

参考技术A 除非是恐怖分子设计的浏览器,否则任何负责任的浏览器都是严禁网页脚本直接操作本地文件。你可以想象一下,如果某一天你打开一个网站,你电脑上的一个文件就不知不觉到了另一个人的电脑中,你什么感觉,反正我是觉得世界末日就要到来了。

当然,如果你的js代码是单独放在一个js脚本文件中,然后在本地通过鼠标双击来运行你的js代码,或者把包含js代码的html文件保存在本地,然后鼠标双击来运行它(而不是在浏览器地址栏输入url来运行),这样是可以操作本地文件的(浏览器可能会发出警告,忽略即可),最简单的就是利用fso组件。
参考技术B nodejs 可以 参考技术C 浏览器不允许操作本地文件。出于安全考虑 参考技术D js是前端语言操作不了文件,后台语言才可以。。 第5个回答  2017-10-06 处於安全考虑,目前主流浏览器是不允许js操作本机的

如何用 sed 替换缩小的 javascript 文件中的多个值 [重复]

【中文标题】如何用 sed 替换缩小的 javascript 文件中的多个值 [重复]【英文标题】:How to replace a multiple values in a minified javascript file with sed [duplicate] 【发布时间】:2019-06-13 06:12:20 【问题描述】:

我需要用 sed 替换缩小的 javascript 文件中的几个值。操作系统是 alpine Linux。

我正在尝试锻炼一个通用正则表达式,它将找到 foo: 和任何字符,直到下一个 , 像这样:foo:____ 并替换为 foo:"bar"foo:!0,无论变量中的值可能是。这个脚本需要一直工作。它不应该依赖于在 : 之后出现(意味着该属性的值是什么)。

这是文件中的前几个字符

(window.webpackJsonp=window.webpackJsonp||[]).push([[5],3:function(l,n,t)l.exports=t("zUnb"),AytR:function(l,n,t)"use strict";t.d(n,"a",function()return e);var e=appVersion:"1.4-beta",buildNr:"123.123",production:!0,tracking:!0,apiHost:"/api/",foo:"",Cdxl:function(l,n,t)"use strict";t.d(n,"a",function()return a);

这是我的开始,它根本不是通用的......

APP_VERSION='"1.4-beta"'
BUILD_NR='"20190118.1"'
PRODUCTION="!"
TRACKING="!0"
API_HOST='"/api/"'
FOO='"bar"'

# demo for the first 3 variables 
sed -i "s/appVersion:[\"0-9A-Za-z.]*/appVersion:$APP_VERSION/;s/buildNr:[\"0-9A-Za-z.]*/buildNr:$BUILD_NR/;s/production:[!0-9A-Za-z.]*/production:$PRODUCTION/" path/to/js-file.js

我尝试了几个小时 - 任何建议都非常受欢迎。

提前致谢!

【问题讨论】:

你的问题是什么? 如果你想匹配到下一个,,你可以使用[^,]* 具有更好解决方案的跨站点复制:unix.stackexchange.com/questions/476536/… 【参考方案1】:

您可以使用正则表达式末尾的 g 修饰符来替换 所有 次出现的模式匹配。

一般示例

one:"1",two:"2",three:"3",one:"one",plz:"nope"

我想用"42" 替换one 之后的所有内容。没有全局修饰符,我得到这个结果:

$ sed -E 's/one:[^,]+/one:"42"/' foo.txt
one:"42",two:"2",three:"3",one:"one",plz:"nope"

注意one: 的第二个实例没有改变。现在使用g 修饰符:

$ sed -E 's/one:[^,]+/one:"42"/g' foo.txt
one:"42",two:"2",three:"3",one:"42",yas:"nope"

这会替换所有出现的情况。

您的具体情况

将其粘贴到文件中,可能称为replacer.sh

#!/usr/bin/env bash

# declare `swap` to be an associative array
declare -A swap

swap[appVersion]='"1.4-beta"'
swap[buildNr]='"20190118.1"'
swap[production]="!"
swap[tracking]="!0"
swap[apiHost]='"\/api-2\/"'
swap[foo]='"bar"'

FILE=$1

for key in $!swap[@]; do sed -E -i 'bak' "s/$key:[^,]+/$key:$swap[$key]/g" $FILE; done

swap 变量中的键和值更改为您需要的。大小写很重要,并转义值中的任何反斜杠。

如果你需要替换更多的东西,你可以简单地添加更多的键/值对。循环将遍历所有键,按顺序应用更改。

sed可以自动创建带有-i标志的备份文件;我认为这些可能会在循环的每次迭代中被吹走——这里要小心。

像这样运行程序:$ ./replacer.sh filename.js

希望这会有所帮助!

【讨论】:

在每次迭代中多次循环文件以执行sed -i 是一种反模式。您想为sed 提供一个更复杂的脚本,该脚本执行您想要的所有替换,并且只处理一次文件。 更根本的是,这里真正的问题是sed 不是实现完全通用的 JSON 解析器的好工具。例如,正确的脚本应该能够理解 JSON 何时出现在 JSON 字符串中。 @tripleee 您对 JSON 解析绝对是正确的——您的答案要好得多。然而,Stevo 专门询问了 sed。感谢关于重复使用sed -i 的观点!我不是 Bash 专家,我很高兴学习。 :) 可能是这样的? ***.com/a/22746932/874188

以上是关于如何用javascript操作本地文件的主要内容,如果未能解决你的问题,请参考以下文章

如何用javascript操作本地文件

如何用angularjs读取本地json

如何用javascript保存网页中的一个img到本地?

如何用js遍历本地文件

如何用java或javascript实现在网页收藏夹中新建文件夹及重命名功能

如何用Xshell导出文件到桌面本地