Реклама на сайте Advertise with us

JavaScript функция c document.write

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 17.12.00
Сообщения: 1653
Рейтинг: 1082

Ссылка на сообщениеДобавлено: 20/08/15 в 10:38       Ответить с цитатойцитата 

На странице генерится яваскрипт где объявляется функция в результате работы которой вывод строка через document.write()
и далее вызов этой функции
При каждой загрузке страницы имя функции разное.
Внимание, знатоки, вопрос:
Как мне результат этой функции присвоить моей переменной.

рандомный код
<script>
function random_name() {document.write('some');}
random_name();
</script>

я хочу иметь, что-то типа
var my_var = 'some';

0
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 20/08/15 в 11:34       Ответить с цитатойцитата 

Цитата:
'some'
это что такое?

если есть доступ к генерирующему скрипту, поменять на

Код:

<script>
var my_var = 'some';
</script>

0
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 20/08/15 в 11:50       Ответить с цитатойцитата 

Nikso писал:
При каждой загрузке страницы имя функции разное.

Тут не совсем понятно, как имя функции в приведённом примере может деклирироваться рендомно?

Если тебе нужне результат того, что пишет в документ функция и ты можешь влезть в JS код самой функции, то ты бы и сам сделал верно?

Тогда рассматриваем фариант, когда влезть в код функции нельзя..
Код:

<div id="random_name">
<script>
function random_name() {document.write('some');}
random_name();
</script>
</div>

<script>
var my_var = document.getElementById('random_name').innerText;
</script>

6
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 20/08/15 в 12:07       Ответить с цитатойцитата 

trollface.png
Код:


<!doctype html>
<script>
    function random_name() {
        document.write('some');
    }
    random_name();
</script>
<script id="self">
    ;(function (window) {
        var self = document.getElementById("self");
        if (self !== void 0 && self.nodeName.toString().toLowerCase() === "script") {
            var all = document.getElementsByTagName("SCRIPT"), i, prev, current, text, exp;
            for(i in all){
                current = all[i];
                if(!!current.id && current.id === "self"){
                    prev = all[i - 1];
                    text = prev.innerText || prev.textContent;
                    exp = /document\.write\((\W)([^\)]+)\1\)/i.exec(text);
                    if(!!exp && !!exp[2]){
                        window.my_var = exp[2];
                    }                   
                    break;
                }
            }
        }
    })(window);
</script>
<script>
   
    alert(my_var);
   
</script>

2
 

продаю базы адалт кейвордов

С нами с 09.11.02
Сообщения: 9045
Рейтинг: 3772


Передовик Master-X (16.05.2004) Передовик Master-X (01.06.2004)
Ссылка на сообщениеДобавлено: 20/08/15 в 12:44       Ответить с цитатойцитата 

freeek: красиво icon_smile.gif

P.S. но вряд-ли сработает...

сдам подпись, стучите в личку

0
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 20/08/15 в 12:52       Ответить с цитатойцитата 

да понятно дело, исходных данных мало, плюс эта рандом функция пишет в дерево сразу.

just for fan, хотел дернуть текст 'some'. так то дергает, разве что в древних браузерах отпадет, без оптимизации, на коленке)

2
 



С нами с 17.12.00
Сообщения: 1653
Рейтинг: 1082

Ссылка на сообщениеДобавлено: 20/08/15 в 13:38       Ответить с цитатойцитата 

На выводимый скрипт повлиять не могу, он где-то в глубинах пхп генерируется. В тексте 'some' ссылка на флвшку, мне вот ее надо выцарпать и засунуть в плейер. Потому что
Код:
<param name="flashvars" value="file=<script>function random_name()...</script>&image=/" />

Не работает.

Если этот урл как-то ранее выдернуть в переменную и сделать так
Код:
<script>document.write('<param name="flashvars" value="file='+my_var+'&image=/" />');

то порядок

0
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 20/08/15 в 13:54       Ответить с цитатойцитата 

Nikso:
Я же дал решение выше.
Оберни вывод функции в невидимый див
Код:
<div id="random_name" style="display:none"><script>random_name();</script></div>

получи её вывод
Код:
<script>
var my_var = document.getElementById('random_name').innerText;
</script>

и замени везде на странице random_name(); на my_var

6
 



С нами с 17.12.00
Сообщения: 1653
Рейтинг: 1082

Ссылка на сообщениеДобавлено: 20/08/15 в 14:11       Ответить с цитатойцитата 

S_Flash: извиняюсь, промотнул что-то до большой бороды freeek:'a )

идею понял, попробовал, но чето my_var у меня Undefined получается

0
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 20/08/15 в 14:47       Ответить с цитатойцитата 

trollface.png trollface.png trollface.png icon_lol.gif
Код:


<!doctype html>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script>
    writeBuckup = document.write;
    document.write = function () {
    };
</script>
<script>
    function random_name() {
        document.write('/content/dir/some.flv');
    }
    random_name();
</script>
<script id="self">
    document.write = writeBuckup;
    my_var = (function (window) {
        var self = document.getElementById("self");
        if (self !== void 0 && self.nodeName.toString().toLowerCase() === "script") {
            var all = document.getElementsByTagName("SCRIPT"), i, prev, current, text, exp;
            var htmlList = [];
            for (i in all) {
                current = all[i];
                typeof current === "object" && htmlList.push(current);
                if (!!current.id && current.id === "self") {
                    prev = htmlList[htmlList.length - 2];
                    if (isNaN(-[1, ])) {
                        text = prev.innerHTML;
                    } else {
                        text = prev.innerText || prev.textContent;
                    }
                    exp = /document\.write\((\W)([^\)]+)\1\)/i.exec(text);
                    if (!!exp && !!exp[2]) {
                        return exp[2];
                    }
                    break;
                }
            }
            return "";
        }
    })(window);
</script>
<script>
    document.write(my_var);
</script>




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

0
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 20/08/15 в 14:56       Ответить с цитатойцитата 

Nikso:
Да, я не кроссбраузерно делал пример. Вот так работает в последних браузерах:

Код:
<!DOCTYPE html>
<head>
</head>
<body>

<script>
function random_name() {document.write('some');}
</script>

<div id="random_name" style="display:none"><script>random_name();</script></div>

<script>
var my_var = document.getElementById('random_name').childNodes.item(1).textContent;
console.log(my_var);
alert(my_var);
</script>

</body>
</html>

7
 



С нами с 17.12.00
Сообщения: 1653
Рейтинг: 1082

Ссылка на сообщениеДобавлено: 20/08/15 в 15:07       Ответить с цитатойцитата 

S_Flash: Спасибо. поменял childNodes.item(1) на 2 и все вышло. Первый индекс выводил просто кусок яваскрипта.

freeek: хардкорщик ))

0
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 20/08/15 в 15:24       Ответить с цитатойцитата 

Nikso писал:
поменял childNodes.item(1) на 2 и все вышло. Первый индекс выводил просто кусок яваскрипта.

Это у тебя если где-то пробел или перевод строки в коде. Если в одну строчку вывести, то должно работать при 1
Код:
<div id="random_name" style="display:none"><script>random_name();</script></div>

если так
Код:

<div id="random_name" style="display:none">
<script>random_name();</script>
</div>

или
Код:

<div id="random_name" style="display:none">    <script>random_name();</script></div>

то при item(2), как у тебя..
Пробел или перевод строки идёт за отдельную ноду, это добавляет лишний индекс.

7
 



С нами с 17.12.00
Сообщения: 1653
Рейтинг: 1082

Ссылка на сообщениеДобавлено: 20/08/15 в 18:12       Ответить с цитатойцитата 

Вон что. Спасибо. smail27.gif
Да, пробел был в конце. Отрезал его нафиг.
отсыпал

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »