2016-10-27 3 views
-1

Я застрял в проблеме возврата цитаты за последний час (в JavaScript). Вот оно:Цитата escape mindblow - 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> 

Я пробовал много подсказок (\ ", \ 'и т. Д.), Но не работает. Любые идеи?

+1

Поскольку мы не знаем, как secretService.sendRequest, secretElement.setSecretAttribute или secretFunction работы, это довольно трудно отлаживать. – Quentin

ответ

0

Предполагая setSecretAttribute не munge строки в некотором роде, просто использовать \" в вашей " -quoted строки и удалить странствующий ;:

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> 

Side Примечание: Там нет необходимости в "" + после scriptToInject =.

0

Вы пытаетесь использовать ссылку на объект HTML для отдельной цитаты в качестве разделителя для вашего атрибута класса. Когда браузер попадает в объект HTML, он не будет рассматривать его как разделитель и поэтому будет рассматривать его как некорректный HTML. Он пытается быть полезным и исправить это для вас, работая над тем, что, по его мнению, является значением атрибута, и обертыванием его в кавычки. Когда вы выходите на консоль, объект HTML декодируется, что скрывает проблему.

Вы лучше просто использовать кавычки и избежать их соответствующим образом:

"secretFunction(secretElement.setSecretAttribute('<button class=\"button-default\">MyButton</button>'));"; 
Смежные вопросы