【问题标题】:Variable scoping between HTML file, Javascript file, and PHP file echo statementsHTML 文件、Javascript 文件和 PHP 文件回显语句之间的变量范围
【发布时间】:2011-07-26 23:28:47
【问题描述】:

在这种情况下如何定义全局 javascript 变量?我希望可以从三个地方访问该变量:

  1. HTML 页面 - 我希望能够在 HTML 页面 favorites.php 的代码中引用变量。
  2. javascript 文件 - 在 HTML 页面中,我加载了一个名为 portal.js 的 javascript 文件
  3. 一个 PHP 文件 - 在 HTML 文件中,我将 loadtreeb.php 加载到 iframe 中。在 loadtreeb.php 中,我有 echo javascript 代码,并希望在该代码中引用该变量。

这是一个场景。

在 HTML 中,收藏夹.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>';

在这种情况下,我尝试在 HTML 页面的标题部分定义变量 d,然后在三个地方引用它而不重新定义该变量。这不行。 loadtreeb.php 文件中回显的 javascript 语句似乎不知道该变量。当变量在 echo 语句中定义时,他们这样做了。但现在我必须在别处访问相同的变量。所以我把声明语句注释掉,放到HTML脚本标签里。

在所有这些地方为该变量实现我想要的可访问性的方法是什么?

【问题讨论】:

    标签: php javascript html scope


    【解决方案1】:
    1. HTML 页面 - 我希望能够在 HTML 页面 favorites.php 的代码中引用变量。
    2. javascript 文件 - 在 HTML 页面中,我加载了一个名为 portal.js 的 javascript 文件

    在页面上执行您的 javascript 与直接在页面中执行相同(因此它将访问您执行它的页面上的变量(并且在代码之前)。

    标题不太正确,这将是完全相同的问题,只有 2 个 html 页面(另一个在 iframe 中)。

    所以如果它在同一个域上,你可以使用:

    parent.window.d
    

    在 iframe 中使用父框架中的 var。

    如果您想在父框架的 iframe 中使用 var,则必须这样做:

    window.frames["tnav"].d
    

    【讨论】:

    • 这听起来很有希望,我会试试看!
    【解决方案2】:

    iframe(在大多数情况下)是一个完全独立的页面,具有自己的 Javascript 上下文。因此,您在主页中定义的变量通常不会对 iframe 的 Javascript 上下文可见,反之亦然。

    【讨论】:

      【解决方案3】:

      您将在跨帧访问数据时遇到问题。这是可能的,但很讨厌。您可能想要在浏览器的顶部对象上定义一些 getter 和 setter,这将需要对 PHP 脚本生成的 JS 进行一些更改。这会很不愉快。

      【讨论】:

        【解决方案4】:

        在 favorites.php JS 中你应该声明 top.d = new dTree();

        在loadtreeb.php JS中,必须使用跨窗口访问:top.d.whatever或parent.d.whatever

        如果你需要沿着框架树向下走,那么 top.frames[0].window 或类似的。

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

        【讨论】:

          猜你喜欢
          • 2010-10-19
          • 2012-06-24
          • 1970-01-01
          • 2014-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多