php - PHP:读取 html 文件并访问 JS 变量
问题描述
假设我在互联网上有一个公共 html 页面,其中包含以下内容:
<html>
<head>
<script>
var variableA = {
name: "A"
};
variableA.id = 1;
</script>
</head>
<body>
...
</body>
</html>
variableA
有没有办法用php获取变量的值?
像这样的东西:
$html = file_get_contents($myUrl);
$variableA = magicMethodIamLookingFor("variableA");
print_r($variableA);
有了这个结果:
Array(
"name" => "A",
"id" => 1
)
我可以只用正则表达式和json_decode
(类似于如何从 HTML 页面获取 Javascript 变量?)但问题是,它不仅仅是一个 json,而且还有变量变化,比如variableA.id = 1;
解决方案
注意:使用纯 PHP 脚本,无法访问 JS 变量。
有趣的要求。下面是一个解决方案。让我们考虑一下在 URL 中传递变量名称的情况。让页面名称为“index.php”。浏览 URL 类似于 localhost/index.php?varName=variableA,其中 varName 是以变量名作为值的查询参数。我们也可以通过稍微调整代码来传递逗号分隔的值。但现在不考虑这个。
概述以下步骤
- 获取 url.php 的内容并将其放置在 index.php 的隐藏 div 中
- 在捕获的内容下,以 var name 和 var value 作为参数调用 Ajax 函数。
- 在 ajax 页面中,将名称/值保存到某个数据库或文件中。
在 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>
设置变量值.php
<?php
/**
* Write code for saving var name & value to DB or file
*/
推荐阅读
- android - 如何用 Flow 替换 LiveData
- php - 致命错误:未捕获的类型错误:filter_var():参数 #3 ($options) 必须是数组类型
- c - 将 C 数组中的一个字符转换为大写会给出 C4244 警告
- unity3d - 检查子弹来自玩家的有效方法 [Unity Multiplayer Mirror]
- python - 在条件下用最常见的数字替换缺失值
- javascript - HTML 视频播放器 - 如果选项卡失去焦点,则无法跳过视频并重新启动
- windows - 有没有办法改变 PrtScr 键执行的操作?
- javascript - 如何为表单中的不同选项组合生成不同的表格 [HTML/JS]
- angular - 更新 formArray 而不发出 valueChanges
- php - 无法连接到登录页面的数据库(PHP,MYSQL)