PDA

Просмотр полной версии : Передача значения переменной через javascript из браузера


fiona
09.02.2007, 11:27
Помогите, люди добрые... Пытаюсь присвоить значение переменной из html через javascript таким образом: onclick="document.MyFlashID.SetVariable('MyVariable','MyValue');"

В динамическом текстовом поле (с Var='MyVariable') это значение появляется, но при попытке работать с переменной каким-либо другим способом ничего не получается - undefined :(

В чем причина?

etc
09.02.2007, 12:10
http://noregret.org/tutor/gentle/
http://noregret.org/tutor/navigation/

fiona
09.02.2007, 12:31
Я тоже умею пользоваться input/search в поисковых системах. ;-) Но здесь нет ответа на вышеприведенный вопрос. Вы думаете иначе???

etc
09.02.2007, 12:56
Да, я думаю иначе. Там рассказывается о всевозможных способах передачи переменной во Flash и то, что SetVariable не лучший вариант.

fiona
09.02.2007, 13:10
Для решения моей задачи этот вариант подходит идеально. Я даже знаю пример, где этот метод благополучно работает, несмотря на описанные Вами трудности: http://pyg.keonox.com/flashmp3player/jcloze.htm
Мне неизвестна самая малость: почему у меня это не хочет работать ;-(

etc
09.02.2007, 13:50
Потому что надо писать setVariable("_level0.anyVariable","value");
А во флеше пользовать _level0.anyVariable.
Я не проверял, но должно работать.

Вы бы пояснили, что значит «при попытке работать с переменной каким-либо другим способом» и привели код того, как вы с ней хотите работать.

fiona
09.02.2007, 14:25
Что-то так тоже не работает - хоть _level0, хоть _root :(

«Каким-либо другим способом» - например, для
<a href="javascript:void(0);" onclick="document.mp3player.SetVariable('currenturl','mysound.mp3');">проиграть</a>


var my_sound:Sound = new Sound();
my_sound.loadSound(currenturl, true);


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

etc
09.02.2007, 14:29
Так ведь ваш код во флеше выполняется раньше, чем вы нажали на ссылку. А переменной currenturl ещё нет. Что мешает переписывать код флеша в диве с разными значениями flashvars?

fiona
09.02.2007, 15:02
Спасибо. :) Почему-то такое простое и логичное объяснение мне в голову не приходило.
А Вам самому переписывание кода флеша в диве не кажется ли усложнением проблемы без необходимости?

Powerhead
06.03.2007, 17:03
Так ведь ваш код во флеше выполняется раньше, чем вы нажали на ссылку. А переменной currenturl ещё нет. Что мешает переписывать код флеша в диве с разными значениями flashvars?

А если значений миллион? Миллион раз код флеша переписывать?


fiona, делай через ExternalInterface
Вот пример.
Flash

import flash.external.*;

// Текстовое поле для дебага
var txtField:TextField = this.createTextField("txtField", this.getNextHighestDepth(), 0, 0, 200, 80);
txtField.border = true;

// Регистрируем внешний метод set, привязанный к внутренней функции __set
if (ExternalInterface.addCallback('set', null, __set)) {
Debug('External method set() registered');
}
else { Debug('Error'); }

// Регистрирует переменную в _root
function __set(myVar, myValue) {

_root[myVar] = myValue;
Debug('New variable registered `'+myVar+'`: '+_root[myVar]);
}

function Debug(msg) {
txtField.text += msg+"\n";
}

JS



function registerVariable(varName, varValue) {

if(varName) {

thisMovie("Айдишник мувика").set(varName, varValue);

}
}

function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName]
}
else {
return document[movieName]
}
}



И вызов

<form>
Var name: <input type="text" name="varName" value="var" id="varName" style="border: 1px solid black;" /> <br /><br />
Value: <input type="text" name="varValue" value="value" id="varValue" style="border: 1px solid black;" /> <br /><br />
<input type="button"
onclick="registerVariable(
document.getElementById('varName').value,
document.getElementById('varValue').value)
;"
value="Register variable" />



</form>

Также allowScriptAccess нужно поставить в always