Переменная область видимости между HTML-файлом, Javascript-файлом и PHP-эхо-операторами - PullRequest
0 голосов
/ 27 июля 2011

Как я могу определить глобальную переменную JavaScript в этой ситуации? Я хочу, чтобы переменная была доступна из трех мест:

  1. HTML-страница - я хочу иметь возможность ссылаться на переменную в коде на HTML-странице Favorites.php.
  2. файл javascript - На странице HTML я загружаю файл javascript с именем portal.js
  3. файл PHP - В HTML-файл я загружаю loadtreeb.php в iframe. В loadtreeb.php у меня есть эхо-код javascript и я хочу сослаться на эту переменную в этом коде.

Вот сценарий.

В HTML, Favorites.php:

<head>
    <script type="text/javascript">
       var d = new dTree();
    </script>
</head>
<body>
        <iframe id="tnav" src="loadtreeb.php" style="border: 0px; width: 200px; height: 86%; overflow: auto;">
        </iframe>
</body

В файле JavaScript, portalb.js:

function deleteitem() {
     d.s(1);
     d.setCookie('csd', '1');
}

В php-файле loadtreeb.php:

echo '<script type="text/javascript">';

/* echo '   d = new dTree(\'d\');'; */

 echo "d.add('1','-1','My Favorites','#','','','images/root.gif','images/rootopen.gif','1');";

 echo  '    document.write(d);';

 echo 'd.s(0);';

 echo  '</script>';

В этом сценарии я пытаюсь определить переменную d в разделе заголовка HTML-страницы, а затем ссылаюсь на нее в трех местах, не переопределяя эту переменную. Это не делает это. Похоже, что операторы javascript, отраженные в файле loadtreeb.php, не знают о переменной. Они сделали, когда переменная была определена в выражениях echo. Но теперь я должен получить доступ к той же переменной в другом месте. Поэтому я закомментировал операторы объявления и поместил его в тег сценария HTML.

Каким образом я хочу получить доступ во всех этих местах для этой переменной?

Ответы [ 4 ]

0 голосов
/ 27 июля 2011
  1. HTML-страница - я хочу иметь возможность ссылаться на переменную в коде на HTML-странице Favorites.php.
  2. файл javascript - На HTML-странице я загружаю файл javascript с именемportal.js с

Выполнение вашего javascript на странице - это то же самое, что выполнение его непосредственно на странице (поэтому он будет обращаться к переменной на странице, на которой вы ее выполняете (и которые ранее были вкод)).

Заголовок не совсем корректен, это будет точно такая же проблема только с 2 html-страницей (и одна в iframe с другой).

Так что если этов том же домене вы можете просто использовать:

parent.window.d

В iframe использовать переменную в родительском фрейме.

Если вы хотели использовать переменную внутри iframe изродительский кадр, вам нужно будет сделать:

window.frames["tnav"].d
0 голосов
/ 27 июля 2011

У вас будут проблемы с доступом к данным через кадры.Это возможно, но противно.Возможно, вы захотите сделать что-то вроде определения некоторых методов получения и установки в верхнем объекте браузера, что потребует внесения некоторых изменений в JS, генерируемый сценарием PHP.Это будет неприятно.

0 голосов
/ 27 июля 2011

В JS Favorites.php вы должны объявить top.d = new dTree ();

В JS loadtreeb.php вы должны использовать кросс-оконный доступ: top.d.whither или parent.d.whither

Если вам нужно перейти вниз по дереву фреймов, то top.frames [0] .window или подобное.

См. https://developer.mozilla.org/en/DOM/window.frames

0 голосов
/ 27 июля 2011

iframe - это (по большей части) совершенно отдельная страница с собственным контекстом Javascript.Таким образом, переменные, которые вы определяете на главной странице, обычно не будут видны в контексте Javascript iframe и наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...