Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не изменяется флеш объект. (https://javascript.ru/forum/misc/65869-ne-izmenyaetsya-flesh-obekt.html)

Артист 12.11.2016 03:01

Не изменяется флеш объект.
 
Вот есть сам объект:

<html>
	<head>
		<script type="text/javascript">
			function randomInteger(min, max)
			{
				var rand = min + Math.random() * (max - min)
				rand = Math.round(rand)
				return rand
			}
			function f() // Обработчик кнопки
			{
				var p = document.querySelector('param') // 
				var param = p.value.split('*')[2].split(':') // Разбить на элементы
				var r // Случайное число от 1 до 27, кроме 25
				while((r = randomInteger(1, 27)) == 25) {}
				param[13] = r // Записать параметр
				var val = "param=tgbut1*cmbut2*" + param[0]
				for(var i = 1, l = param.length; i < l; i++) val += ':' + param[i]
				p.value = val // Установить параметры
				alert(val)
			}
			function main()
			{
				document.querySelector('button').addEventListener('click', f)
			}
			document.addEventListener('DOMContentLoaded', main) // Вызвать функцию после постройки DOM
		</script>
	</head>
	<body>
		<center>
			<object type="application/x-shockwave-flash" data="http://dcdn.heroeswm.ru/swffiles/map.swf?ver=464276113" width="400" height="400">
				<param name="FlashVars" value="param=tgbut1*cmbut2*1:1:0:0:0:0:0:0:0:0:0::0:3" />
			</object>
			<br><br><br>
			<button>Изменить пункт назначения</button>
		</center>
	</body>
</html>


В этой строке: param=tgbut1*cmbut2*1:1:0:0:0:0:0:0:0:0:0::0:3
Последний параметр отвечает за то, в каком секторе будет нарисован красный крестик с мечом.

Вот если вставить код допустим в Real-time HTML Editor, и изменить этот параметр(вручную, от 1 до 27), страница как бы перезагружается и крестик изменяет своё расположение на карте.
А при нажатии кнопки(я сделал под под картой), ничего не происходит.
Т.е. я меняю этот параметр через JS, а крестик остаётся на месте.

Может можно как - то перезапустить, что - ли этот swf объект?

Deff 12.11.2016 03:55

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

Артист 12.11.2016 09:03

На странице с картой только один скрипт: swfobject22.js

Я так понял - это стандартный апи.
Содержит он вот такие функции:

registerObject - регистрирует новый объект
getObjectById - вернёт идентификатор объекта
embedSWF - встраивает объект
switchOffAutoHideShow - выключить автоскрытие показа? Видимо автовоспроизведение всё - таки...
hasFlashPlayerVersion - получает текущую версию флеш плейера
showExpressInstall - показывает окно установки плейера
removeSWF - удаляет объект
addDomLoadEvent - назначает вызов функции на событие
addLoadEvent - назначает вызов функции на событие
getQueryParamValue - получает параметры объекта
expressInstallCallback - то - ли установка плейера, то ли функция которая вызовется после...

Ничего нет про перезагрузку...
Может нужно удалить и заново создать?

Артист 13.11.2016 13:27

Всё получилось:
<html>
	<head>
		<script type="text/javascript" src="http://dcdn.heroeswm.ru/swfobject22.js"></script>
		<script type="text/javascript">
			function randomInteger(min, max)
			{
				var rand = min + Math.random() * (max - min)
				rand = Math.round(rand)
				return rand
			}
			function f() // Обработчик кнопки
			{
				var center = document.querySelector('center')

				var obj = center.children[0] // Объект

				var div = document.createElement('div')
				div.id = "content"
				div.innerHTML = "324234"
				center.insertBefore(div, obj)

				var data = obj.data
				var w = obj.width
				var h = obj.height

				var FlashVars = obj.children[0].value.split('*')[2].split(':') // Разбить на элементы
				var r // Случайное число от 1 до 27, кроме 25
				while((r = randomInteger(1, 27)) == 25) {}
				FlashVars[13] = r // Записать параметр
				var val = "param=tgbut1*cmbut2*" + FlashVars[0]
				for(var i = 1, l = FlashVars.length; i < l; i++) val += ':' + FlashVars[i]
				FlashVars = val // Установить параметры

				var bgcolor = obj.children[1].value
				var allowScriptAccess = obj.children[2].value
				var wmode = obj.children[3].value

				obj.id = "flashmaps"
 
                swfobject.removeSWF("flashmaps")

				swfobject.createSWF({data: data, width: w, height: h}, {FlashVars: FlashVars, bgcolor: bgcolor, allowScriptAccess: allowScriptAccess, wmode: wmode}, "content")
			}
			function main()
			{
				document.querySelector('button').addEventListener('click', f)
			}
			document.addEventListener('DOMContentLoaded', main) // Вызвать функцию после постройки DOM
		</script>
	</head>
	<body>
		<center>
			<object type="application/x-shockwave-flash" data="http://dcdn.heroeswm.ru/swffiles/map.swf?ver=464276113" width="450" height="450">
				<param name="FlashVars" value="param=tgbut1*cmbut2*1:1:0:0:0:0:0:0:0:0:0::0:1" />
				<param name="bgcolor" value="#ddd9cd" />
				<param name="allowScriptAccess" value="always" />
				<param name="wmode" value="opaque" />
				<div>
					<p>
						<a href="http://www.adobe.com/go/getflashplayer">
							<img src="http://dcdn.heroeswm.ru/i/get_flash_player.gif" alt="Get Adobe Flash player" />
						</a>
					</p>
				</div>
			</object>
			<br><br><br>
			<button>Изменить пункт назначения</button>
		</center>
	</body>
</html>

Deff 13.11.2016 14:49

Можно выставить высоту окна отображения
[HTML run height=600]

Артист 13.11.2016 20:45

Понял, спасибо ))

По теме, оказалось всё проще, не нужно никаких манипуляций с объектом проводить.
Меняем что нужно прямо в странице, находим элемент - родителя, копируем и заново вставляем его содержимое через innerHTML.
Всё.


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