PHP:阅读html文件并访问JS变量

时间:2018-11-07 11:26:57

标签: php

让我们说我在互联网上有一个公共的html页面,其中包含以下内容:

<html>
    <head>
        <script>
            var variableA = {
                name: "A"
            };
            variableA.id = 1;
        </script>
    </head>
    <body>
        ...
    </body>
</html>

是否可以通过php获取变量variableA的值?

类似的东西:

$html = file_get_contents($myUrl);
$variableA = magicMethodIamLookingFor("variableA");
print_r($variableA);

结果如下:

Array(
    "name" => "A",
    "id" => 1
)

我可以使用正则表达式和json_decode(类似于How to get Javascript variable from an HTML page?)来完成此操作,但问题是,它不仅是单个json,而且还存在诸如variableA.id = 1;之类的变量更改。

1 个答案:

答案 0 :(得分:0)

注意:使用普通的PHP脚本,将无法访问JS变量。

有趣的要求。下面是一个解决方案。让我们考虑一下在URL中传递变量名的情况。让页面名称为“ index.php”。浏览URL如下所示:localhost / index.php?varName = variableA,其中varName是将变量名作为值的查询参数。我们还可以通过稍微调整代码来传递逗号分隔的值。但这现在还没有考虑。

概述以下步骤

  1. 获取url.php的内容并将其放在index.php的隐藏div中
  2. 在捕获的内容下方,调用一个以var name和var value作为参数的Ajax函数。
  3. 在ajax页面中,将名称/值保存到某些数据库或文件中。
  4. 在ajax调用之后,还有一些DOM,我们将在其中打印名称/值并在显示相同名称后将其从DB或File中删除。 注意:主要代码在JS中-请参见getVarWithValue(variable)函数。

    <html>
    <body>
    
        <?php 
            $varName = (isset($_GET['varName']) && trim($_GET['varName']) != "") ? $_GET['varName'] : 'variableA';
        ?>
    
        <div style="display:none">
            <?php
                $html = file_get_contents('./url.php');
                echo $html;
    
            ?>
            <script>
                //THIS IS THE CORE FUNCTION WHICH GETS THE VAR NAME & VALUE
                function getVarWithValue(variable) {
                    var param = '';
                    for (var name in this) {
                        keyValue = [];
                        if (variable == name ) return param += name+'='+JSON.stringify(eval(name));
                    }
                    return false;
                }
    
                var http = new XMLHttpRequest();
                http.open("POST", "setVariableValue.php", false); // 3rd argument makes sure that the call is NOT async.  
                http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                http.onreadystatechange = function() {
                    if (http.readyState == 4 && http.status == 200) {
                        document.getElementById("varValue").innerHTML = http.responseText.toString();
                    }
                };
                http.send(getVarWithValue( '<?php echo $varName ?>' ));
            </script>
        </div>
        <?php
            //$varValue = getValuefromDB(); Get the saved value from DB or file
            echo "The variable value of $varName is: ".$varValue;
            // Write code to remove the row from DB or file
        ?>
    </body>
    

url.php (我们需要从中捕获变量名称和值的页面)

<html>
    <head>
        <script>
            var variableA = {  name: "A" };
            variableA.id = 1;
            var variableB = ["Stack", "Overflow"]
        </script>
    </head>
    <body>
        Some Text
    </body>
</html>

setVariableValue.php

<?php
/**
* Write code for saving var name & value to DB or file
*/