引用逃脱mindblow - JavaScript

时间:2016-10-27 15:33:39

标签: javascript node.js escaping quotes

我在最后一小时(在JavaScript中)坚持引用转义问题。 这是:

var injectScript = function() {

     var scriptToInject = "" +
     "secretFunction(secretElement.setSecretAttribute('<button class=&#x27;button-default&#x27;>MyButton</button>'));";

     secretService.sendRequest(scriptToInject);
}

因此我的injectScript()函数的目标是注入JavaScript代码。它通常有效,但在这个特殊的例子中,它不是。

在我包含的代码中,您可以看到我尝试注入函数secretFunction()。此函数只修改HTML页面中元素的某些属性。

但在Chrome控制台中,我的元素代码如下:

<button class="'button-default'">MyButton</button>

我不知道为什么会有“和”。我期望的结果是:

<button class="button-default">MyButton</button>

我尝试了很多逃避提示(\“,\'等),但非工作..有什么想法?

2 个答案:

答案 0 :(得分:0)

假设setSecretAttribute没有以某种方式处理字符串,只需在\"引用的字符串中使用",然后删除错误的;

var injectScript = function() {

     var scriptToInject = "" +
     "secretFunction(secretElement.setSecretAttribute('<button class=\"button-default\">MyButton</button>'));";
     // -------------------------------------------------------------^^--------------^^^

     secretService.sendRequest(scriptToInject);
}

定义的字符串是

secretFunction(secretElement.setSecretAttribute('<button class="button-default">MyButton</button>')

... 定义的字符串

<button class="button-default">MyButton</button>

旁注:"" +之后不需要scriptToInject =

答案 1 :(得分:0)

您正在尝试将单引号的HTML实体引用用作class属性的分隔符。当浏览器访问HTML实体时,它不会将其视为分隔符,因此会将其视为一些格式错误的HTML。它试图为您提供帮助,并通过处理它认为属性值的内容并将其包装在引号中来为您解决此问题。当您输出到控制台时,HTML实体正在被解码,这会掩盖问题。

最好只使用引号并适当地转义它们:

  $(document).on('change', '.selectInput', function() {
    var savevalue = (this.value);
    alert(this.value); // or $(this).val()
    var selectClassRaw = $(this).attr("class").replace('selectInput selectInput', '');
    alert(selectClassRaw);
    $('.selectInputSave' + selectClassRaw).val(savevalue);
  });