2012-03-02 77 views
0

我有问题!我不知道这是可能的,但是......javascript - 查看评论

我有一个页面一个JavaScript包含文件上。在文件的顶部是一个评论,看起来沿此线的东西:

/* 
    Local site config.js 
    Last updated: 2012.01.04 
*/ 

我想做些什么可以做的是另一种JavaScript文件中(该文件被第一个文件后装),以某种方式得到那个日期。所以我的问题是,评论以某种方式存储在DOM中,或者有一些其他方式来访问此文件的内容,我可以使用正则表达式来抓取它等。

基本上我有依赖于本地文件提供一些配置选项的全局文件,并有一吨拥有自己的本地配置文件的网站。我希望能够从全局文件中的本地.js文件中获取该日期。本地和全局.js文件都托管在同一个域中,但包含.js文件的站点可能与.js文件位于同一个域中,也可能不在.js文件所在的域中。

我知道正确答案是更新所有本地.js文件以将该日期放入.js变量中,作为长期解决方案,我当然打算这么做。但作为一个短期解决方案,我现在唯一可以改变的就是全局.js文件。如果它不能完成,那么它不能完成,但我想探索我的选择,到目前为止,我想不出有什么办法可以得到这个日期......嘘......任何人有任何想法?

+0

解析后不会保留注释,因此您需要像打开文本文件一样打开文件,然后手动读取注释。然后你可以将它解析为文件中的日期变量 – jzworkman 2012-03-02 15:36:26

+0

@ T.J.Crowder很好,但是他们不能以他想访问的方式访问其他文件,我只是写得很差。我编辑它以反映这一点。 – jzworkman 2012-03-02 15:37:57

回答

3

所以我的问题是,不知何故注释存储在DOM中......

都能跟得上。

...还是有一些其他方式来访问此文件的内容,我可以使用正则表达式来刮取它等。

不通过ajax第二次加载它,这将受SOP限制。例如,你可以为文件做一个ajax GET,它会给你它的文本,然后应用正则表达式来查找“Last updated:”之后的位。但.js文件必须与您在HTML文档中执行此操作的HTML文档位于相同的原始位置(请参阅链接以了解原因)。

理想的情况下,如你所说,你要修改的第一个文件,以便它保存在一个变量,你可以访问该日期。 (这可能会最终成为一个全局变量,这是不太理想的,除非你已经有一些其他全球性,你可以把它贴在一个属性。)

+1

本地.js文件非常短,所以作为一个短期解决方案,我不介意第二次加载它,但正如您所指出的那样,我知道无论如何我都无法使用ajax。我猜想没有其他的魔杖丢失了,但没有伤害。谢谢! – slinkhi 2012-03-02 15:56:15

+0

@mysql_noobie_xxxx:正如你所说,在询问中没有任何伤害!祝你好运, – 2012-03-02 16:01:12

0

你也许可以使用反射来做到这一点。 This link解释让代码注释出使用正则表达式的函数体中的相当复杂的方式,所以也许这可能与整个文件也需要这样做,但它可能比使用本地变量多了很多麻烦。

我建议使用正则表达式来提取数据和写回该文件作为一个局部变量使用PHP或东西循环遍历问题的文件。可能不那么头疼。

+1

*“你也许可以用反射来完成它。”*不是OP所描述的,不是;甚至在个别职能上也不可靠。首先,该技术仅适用于特定函数的源,因为它使用'函数#toString'。其次,'Function#toString'从来没有标准化过,实现返回任何喜欢的东西,包括“代码在这里”(虽然所有主要的桌面浏览器都是返回源)是完全可以接受的。第三,并不是所有使用'toString'提供源代码的浏览器都包含注释。 – 2012-03-02 15:51:43

+0

够公平的。看起来像'正确'的方法是唯一的方法。 – 2012-03-02 15:54:15