将文件系统位置解析为可用文件:// url in chrome

时间:2014-11-15 04:20:49

标签: javascript regex google-chrome-extension

我在Chrome扩展程序中将文件保存到用户的硬盘驱动器中,我需要一种方法以编程方式在chrome浏览器中打开文件。我可以使用chrome tabs API来创建选项卡并设置其URL。问题是文件的文件系统地址。

Chrome会将文件名中的特殊字符切换为其他表达式,例如空格变为%20。

为了解决这个问题,我想在保存之前解析文件名,删除会导致这些网址损坏的字符。

我无法弄清楚RegEx是否正确解析文件名。

有两件事可以帮助我:

  1. 在Chrome中打开网址时,会在网址中导致这些损坏的所有特殊字符的列表。

  2. 甚至更好,一个即时解决方案,来自RegEx的帮助,我可以使用javascript replace method将每个“/”替换为“\”,以及其他每个不是a的字符字母或数字(或我刚刚添加的“\”)和“_”

  3. 编辑:

    如果我没有考虑字符串的这些更改,我将无法在chrome选项卡中打开文件。例如,以下代码将不起作用。

    chrome.browserAction.onClicked.addListener( function(tab) {
      chrome.tabs.create({ url: 'file:///home/user/1057_AngularJS: Developer Guide: Directives.mhtml'}, function(tab) {
      });
    });
    

    我需要这样做:

    chrome.browserAction.onClicked.addListener( function(tab) {
      chrome.tabs.create({ url: 'file:///home/user/1057%5CAngularJS:%20Developer%20Guide:%20Directives.mhtml'}, function(tab) {
      });
    });`
    

    我想用/ s替换/ s,以便文件系统网址尽可能与网页网址类似,但如果这会导致问题,我可以放弃。

2 个答案:

答案 0 :(得分:1)

  

我可以使用的RegEx帮助的即时解决方案   javascript&替换方法来替换每个" /"用" \"和每一个   其他不是字母或数字的字符(或者#34; \"我   刚刚添加了" _"

你在这里:

'Hello/你 好/1337'.replace(/\//g, '\\').replace(/[^a-zA-Z0-9\\]/g, '_');

输出:

'Hello\___\1337'

答案 1 :(得分:0)

我最终使用.replace(/[^a-zA-Z0-9\.]/g, '_'),或者没有用/替换/,因为\'也被编码为特殊字符。我还想将句点保留在文件名中。要查看已编码的完整字符列表,请转到here