将特殊字符从 CEP 面板发送到 Extendscript

问题描述 投票:0回答:1

我正在 After Effects 中创建一个 CEP 面板,由各种输入文本字段组成。简而言之,按下按钮后,所有文本字符串都会收集到一个对象中,然后发送到 ExtendScript 以显示在警报中。在 ExtendScript 中,从 CEP 面板发送的字符串的解析工作正常,直到使用特殊字符。例如,如果我写“文本”,撇号会产生错误并且解析不起作用。我不知道如何处理这些转义字符串或使用其他方法的行为。这是一段代码。谢谢你

//javascript
function (sendObjtoExtendscript){
var myObj = {
    text1 : "test",
    text2 : "test's"
};
    var csInterface = new CSInterface();
    csInterface.evalScript("myFunction('"+JSON.stringify(myObj)+"')"); 
};

//extendscript

// in the line 1, the json2.js library

function myFunction(value){
    var x = JSON.parse(value); 
    alert(x.text2);
}

//result: Unable to execute script at line 1. Expected: )

我需要从输入文本中获取准确的字符串,因此在面板中,如果我输入“Joe's”,我希望在扩展脚本警报消息中看到它。

javascript parsing extendscript complex-event-processing after-effects
1个回答
0
投票

问题似乎是由于 JavaScript 字符串中使用了单引号造成的。当您在传送给 ExtendScript 的字符串中使用单引号时,它与用于封装字符串的引号发生冲突,从而导致语法错误。

要解决此问题,您可以使用双引号字符将字符串括起来,然后转义字符串本身内的所有双引号。

以下是如何修改 JavaScript 代码的说明:

function sendObjtoExtendscript() {
  var myObj = {
      text1 : "test",
      text2 : "test's"
  };
  var jsonString = JSON.stringify(myObj).replace(/\"/g, '\\"'); // Escape double quotes
  var csInterface = new CSInterface();
  csInterface.evalScript('myFunction("' + jsonString + '")'); 
}

在此代码片段中,我使用

replace
来转义 JSON 字符串本身内的任何双引号字符。这可确保字符串在传送到 ExtendScript 时正确封装。

ExtendScript 代码保持不变,现在应该可以正常工作。如果您依赖于 ExtendScript 中的 JSON 解析,请确保包含 JSON2 库,这应该允许您按预期处理字符串。

© www.soinside.com 2019 - 2024. All rights reserved.