Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Как вытащить значение переменной из чужого скрипта


Автор: vpokorp 26.8.2008, 10:10
Чужой скрипт вызывается с помощью



Код

<script type="text/javascript"><!--
document.write('<sc'+'ript type="text/javascript" src="http://sait.ru/scr.js?"></sc'+'ript>');
//--></script>


Можно ли оттуда вытащить значение переменной? Если да то как?

И заодно вопрос - в чем еще разница между таким вызовом скрипта и простым

Код

<script type="text/javascript" src="http://sait.ru/scr.js?"></script>


причем разница, как для посетителя открывающего страницу (его браузера), так и для сервера на котором находится подключаемый скрипт.

и зачем в первом варианте делается sc'+'ript  вместо script 










Автор: Ghirik 26.8.2008, 10:49
Конечно можно, просто добавьте ваш код:

Код

<script type="text/javascript"><!--
document.write('<sc'+'ript type="text/javascript" src="http://sait.ru/scr.js?"></sc'+'ript>');
alert(имя вашей переменной);
//--></script>


Такое подключение выедет результат работы скрипта очистив экран.

</script> делится на две части, чтобы интерпретатор не воспринял его, как закрывающий тэг выводящего блока <script type="text/javascript"><!-- //--></script>.

Код

<script type="text/javascript" src="http://sait.ru/scr.js?"></script>


В этом случае экран не будет очищен, но работоспособность подключаемого скрипта может сохранится, если не возникнет конфликтов.

Очистить экран можно написав document.body.innerHTML = '';


Автор: vpokorp 26.8.2008, 10:59
у меня получается в первом случае 

Код

<script language="javascript">
document.write('<sc'+'ript type="text/javascript" src="scr.js"></sc'+'ript>');
alert(a);
</script>


ошибка (выдает отсутствие переменной a)

а во втором случае 
Код

<script type="text/javascript" src="scr.js"></script>

<script language="javascript">
alert(a);
</script>

все нормально

сам файл scr.js содержит одну строку
Код

var a='ku-ku'


и понимает ли сервер на котором расположен scr.js как его вызывают?

Автор: Ghirik 26.8.2008, 11:30
На самом деле, браузер не дожидается загрузки вашего скрипта. Потому, если alert(имя вашей переменной); стоит сразу после document.write, переменная, скорее всего ещё не определена.

Вы подробнее изложите, чего хотите добиться....

Добавлено @ 11:33
Сделайте так window.setTimeout('alert(имя вашей переменной)', 5000);

Добавлено через 6 минут и 46 секунд
Цитата

и понимает ли сервер на котором расположен scr.js как его вызывают?


Нет, сервер не знает, как вызывается скрипт.

Добавлено через 8 минут и 26 секунд
<script type="text/javascript"> - правильно.
<script language="javascript"> - устарело.

Автор: vpokorp 26.8.2008, 13:17
Да, теперь работает - спасибо.


Только 
Код

<script  type="text/javascript">
document.write('<sc'+'ript type="text/javascript" src="scr.js"></sc'+'ript>');
window.setTimeout('document.write(z)', 5000);
</script>


выводит переменную z вместо  всего остального, а как сделать чтобы выводилась просто в нужном месте страницы?

т.е. если штатно сторонний скрипт используется как
 
Код

<script  type="text/javascript">
document.write('<sc'+'ript type="text/javascript" src="scr.js"></sc'+'ript>');
</script>


то можно было бы дополнительно использовать его часть в другом месте страницы
Код

<script  type="text/javascript">
window.setTimeout('document.write(z)', 5000);
</script>




И еще - переменная в чужом скрипте оказалась массивом

Код

 var skaz = [ 
['kolobok','lisa'],
['ded','baba'],
['volk','zajac'],];



как вызвать оттуда значение 'baba' ?
skaz[1][1] ?




Автор: bars80080 26.8.2008, 13:59
Цитата(vpokorp @  26.8.2008,  13:17 Найти цитируемый пост)
skaz[1][1] 

 smile 

Автор: vpokorp 26.8.2008, 15:29
 smile 
увы - переменная оказалась еще и в теле функции.

Автор: Ghirik 26.8.2008, 15:32
Цитата

а как сделать чтобы выводилась просто в нужном месте страницы?


Вывести в нужном месте.  smile 

Цитата

то можно было бы дополнительно использовать его часть в другом месте страницы


Если ваш скрипт использует метод document.write, то Вы, скорее всего, не знаете какие тэги генерит подключаемый скрипт. Это затрудняет вставку в нужное место значения переменной.
document.write заменяет ваш исходный html-код. Потому, лучше вообще отказаться от подключения стороннего скрипта этим методом.

Может Вы дадите ссылку на скрипт, который хотите подключить, и скажете, что из него нужно достать. Так будет значительно быстрее. Не хочется выкладывать здесь, тогда напишите в личку.


Автор: vpokorp 26.8.2008, 16:32
скрипт создает ссылку вида 

Код

<div class="asdf"><a href="http://site.ru/zxc/peremennaja" target="_blank">Ссылка</a></div><div>неплохая такая ссылка.</div>


задача - найти 'peremennaja'  и вывести ее в другом месте

 smile 

Автор: Ghirik 26.8.2008, 17:01
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-us">
<title>Title block</title>
<script type="text/javascript">
<!--
document.write('<div class="asdf"><a href="http://site.ru/zxc/peremennaja" target="_blank">Ссылка</a></div><div>неплохая такая ссылка.</div>');

function getHret() {
    var as = document.getElementsByTagName('a');
    for (var i = 0; i < as.length; i++) {
        if (as[i].href.indexOf('href="http://site.ru/zxc/')) {
            var a = as[i].href.replace(/http:\/\/site.ru\/zxc\//,'');
            alert(a);
        };
    };
};

//-->
</script>
</head>
<body onclick="getHret();">

</body>
</html>


Боюсь, что и этого окажется мало...
Если бы вы сразу поставили правильно задачу, эта тема закончилась бы на втором посту.



Автор: vpokorp 27.8.2008, 10:57
Спасибо большое.
Это именно то что надо. smile 
После небольшой настройки работает как часы.  smile 

А по поводу правильной постановки задачи соглашусь на все 100, с небольшим добавлением, что делать это можно только, досконально зная предмет, чем я к сожалению не обладаю. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)