簡體   English   中英

Javascript-如何安全地評估表達式以實現自動完成?

[英]Javascript - how to safely evaluate expressions for auto-complete?

我正在向JavaScript控制台添加自動完成功能(腳本正在遠程瀏覽器上運行)。

我的方法是在插入符所在的位置評估表達式,如果評估產生了object ,則建議使用自動完成屬性列表。 例如(其中|是插入符號的位置):

document.|

在這種情況下,我評估var evalExp = document; 然后迭代它的成員for (var prop in evalExp)以創建自動完成建議的列表。

問題是,如果我正在評估的表達式包含函數或賦值,例如:
count++
e.click()
alert('Some message')
我不希望它被執行,因為它改變了瀏覽器的狀態,而不僅僅是評估並返回一個對象。

因此,如果它們調用函數或它們包含賦值運算符,我想避免對任何表達式求值。

問題:

  • 我還應該避免評估其他表達式嗎?
  • 有什么其他方法可以創建建議列表?

  • 創建建議列表的另一種方法是將對象模型作為字符串獲取,按句點分隔,並遍歷最后一個對象的屬性。 例如...

    var line = "document.body.getElementsBy",
    objs = line.replace(/[\(\{\[]+.*?[\)\}\]]+/g, '').split(/[^\w\-]/),
    lastObj = objs[objs.length - 1],
    currentObj = window,
    i = 0;
    
    if (objs[0] === 'window') {
        objs.splice(0, 1);
    }
    
    objs.splice(-1, 1);
    
    while (currentObj.hasOwnProperty(objs[i])) {
        currentObj = currentObj[objs[i++]];
    }
    
    for (var prop in currentObj) {
        if (prop.indexOf(lastObj) === 0) {
            console.log('Auto complete:', lastObj, 'with', prop);
        }
    }
    
    /* Outputs:
    Auto complete: getElementsBy with getElementsByTagName
    Auto complete: getElementsBy with getElementsByTagNameNS
    Auto complete: getElementsBy with getElementsByClassName
    */
    

    您的最終代碼將更加復雜,但這是基本思想。

    暫無
    暫無

    聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

     
    粵ICP備18138465號  © 2020-2024 STACKOOM.COM