Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как обработать или распарсить javascript (https://javascript.ru/forum/misc/69252-kak-obrabotat-ili-rasparsit-javascript.html)

jay-S 09.06.2017 10:07

как обработать или распарсить javascript
 
Здравствуйте!

суть такая я делаю AJAX запрос получаю страничку в которой есть код

<script type="text/javascript">
var number = '583';
и здесь еще куча кода js
</script>


как мне
а) выполнить этот код и получить то что он делает
б) возможно ли его распарсить и получить именно javascript кусок кода в теге <script type="text/javascript"></script>

?

ksa 09.06.2017 10:20

Цитата:

Сообщение от jay-S
выполнить этот код

Как вариант, вставить в
<head></head>


Цитата:

Сообщение от jay-S
возможно ли его распарсить и получить именно javascript кусок кода в теге
<script type="text/javascript"></script>

Разумеется можно!

var str='<script type="text/javascript">';
str+='alert("Test");';
str+='</'+'script>';
alert(str.match(/<script type="text\/javascript">(.*)(?=<\/script>)/)[1]);

jay-S 09.06.2017 10:43

хорошо вот в js который на странице есть в теге javascript такая строчка

KAPI=ADAS('&*yikku6t*78FDS43=rrwe676jUY%4gfdgH568' );


как мне получить эту строчку, а в идеале то что содержится в скобках тоесть вот это &*yikku6t*78FDS43=rrwe676jUY%4gfdgH568

ksa 09.06.2017 10:57

Цитата:

Сообщение от jay-S
в идеале то что содержится в скобках тоесть вот это &*yikku6t*78FDS43=rrwe676jUY%4gfdgH568

Дык!

var str='KAPI=ADAS(\'&*yikku6t*78FDS43=rrwe676jUY%4gfdgH568\' ); alert( \'tmp\' );';
alert(str.match(/KAPI=ADAS\('(.*?)(?=' \);)/)[1]);

ruslan_mart 09.06.2017 11:52

Цитата:

Сообщение от jay-S
а) выполнить этот код и получить то что он делает

var response = '<script type="text/javascript">alert("Foo")<\/script><div>Bla</div><script>alert("Bar")<\/script>';

var pattern = /<script[^>]*?>([\s\S]+?)<\/script>/gi;
var result;

while(result = pattern.exec(response)) {
     eval(result[1]);
}

jay-S 09.06.2017 12:03

спс всем!

ksa 09.06.2017 14:02

Цитата:

Сообщение от Ruslan_xDD
eval(result[1]);

За такое ранее тут минусовали карму! :D

ruslan_mart 09.06.2017 18:43

ksa, а что не так? eval не стоит использовать там, где это не безопасно. А тут, по сути, нужно запустить свои же скрипты, так что разницы особо нет, или же создать новый тэг script.

Alexandroppolus 11.06.2017 20:31

Вместо eval лучше использовать либо (0,eval), либо Function, либо тег скрипт.

просто eval плох тем, что выполняет код в локальном контексте, а не потому что в принципе выполняет код из строки. От этого бывает ряд проблем.

Ну и, конечно, если возник сабж, то что-то не совсем правильно в архитектуре. Подозреваю, что идеальным результатом рефакторинга был бы запрос json, в котором есть данные под шаблонизацию и данные для выполнения некоторого скрипта, уже имеющегося на странице.

ksa 13.06.2017 08:53

Цитата:

Сообщение от Ruslan_xDD
а что не так?

Этот вопрос теперь некому адресовать... Те ребята давно тут не появляются.


Часовой пояс GMT +3, время: 09:37.