2011-04-01 87 views
0

這是一個用於Adobe ExtendScript的JavaScript。基本上我想在腳本中有一個持久變量來存儲用戶的喜好,就像你可以用AppleScript property一樣。我能想到的唯一方法就是腳本用File.write()來覆蓋自己。使用File.write()覆蓋本身是否安全?

var MY_PROPERTY = true; 

function reassignProperty(propName, propValue) { 
    var thisFile = new File($.fileName); 

    if (thisFile.open("r")) { 
     var myScript = thisFile.read(); 
     thisFile.close(); 

     // Look for the property declaration and overwrite with new value 
     var searchStr = new RegExp("(var " + propName + " =)" + ".+"); 
     var newScript = myScript.replace(searchStr, "$1" + propValue + ";"); 

     thisFile.open("w"); 
     thisFile.write(newScript); 
     thisFile.close(); 
    } 
} 

reassignProperty("MY_PROPERTY", "false"); 

據我所知,這工作。但是安全嗎?我的直覺告訴我應該有一個更乾淨的方法來擁有持久變量,但如果沒有,我只想知道自覆蓋腳本是否存在任何潛在問題。

回答

0

我對Adobe ExtendScript並不熟悉,但通常您會將用戶的首選項存儲在單獨的文件中,然後在程序啓動時讀取該文件。

+0

他試圖更新該單獨文件中的用戶首選項。 – Prescott 2011-04-01 18:34:29

+1

真的嗎?說「覆蓋自己」聽起來不像一個單獨的文件。基本上,我絕不會建議在腳本文件運行時修改腳本文件,但可以繼續對當前未運行的腳本文件進行任何修改。 – jhocking 2011-04-01 18:48:10

+0

你是對的,我的道歉。 – Prescott 2011-04-01 18:49:44

0

這幾乎肯定會是一個糟糕的設計決定,其中包括一個程序替代自身的能力。首先你會遇到困難,因爲當前的執行線程與應該運行的文件不同,所以你肯定會得到副作用。

基本上你要求混淆,混亂是不好的。您應該使用外部文件來存儲數據,或者只將信息保存在HTML的變量或字段中。