我正在开发一个 Chrome 扩展程序,它只是从某个网页的标记中解析出一些数据,然后将该数据发送到一个 PHP 文件,该文件也是我的扩展程序的一部分。虽然我的 Javascript 没有任何错误,但在我看来 PHP 文件实际上并没有被执行,我什至不知道如何调试。
根据对许多教程和 SO 搜索的回顾,我的方法是让我的 Javascript 文件向 PHP 文件发送 XML 请求,该文件将与我的 MySQL 数据库(通过 freesqldatabase.com 托管)进行对话
我的解压加载文件结构是:
- my_php_file.php
- 内容.js
- jquery-3.6.0.min.js
- 清单.json
我的清单看起来像这样(为清楚起见,对一些值进行了编辑):
{
"manifest_version": 3,
"name": "my extension name",
"version": "0.1",
"content_scripts": [
{
"matches": [
"*://*.thesiteImworkingon.com/games/play.phtml*"
],
"js": ["jquery-3.6.0.min.js", "content.js"]
}
],
"web_accessible_resources": [
{
"resources": ["my_php_file.php"],
"matches": ["<all_urls>"]
}
]
}
content.js 看起来像这样(再次,为了清楚起见,修改了一些变量名):
// a bunch of querySelector statements to parse out my data of interest; save these as var1 etc.
var query = chrome.runtime.getURL("my_php_file.php") + "?par1=" + var1 + "&par2=" + var2 + "&par3=" + var3 + "&par4=" + var4;
console.log(query); // looks as expected
var xhr = new XMLHttpRequest();
xhr.onerror = function() {console.log('error');};
xhr.open("GET", query, true);
xhr.send();
my_php_file.php 看起来像这样(为了清楚起见,再次编辑/修改):
<?php
echo "I'm in the PHP file";
$var1 = $_GET['par1'];
$var2 = $_GET['par2'];
$var3 = $_GET['par3'];
$var4 = $_GET['par4'];
$con = mysqli_connect('[host name]',
'[user name]',
'[password]',
'[db name]',
db port);
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
$sql="INSERT INTO myTable (col1, col2, col3, col4) VALUES(".$var1 .",".$var2.",".$var3.",".$var4.")";
mysqli_stmt_execute($sql);
mysqli_stmt_close($sql);
mysqli_close($con);
?>
当我在浏览器中打开相关页面时,Javascript 文件的解析部分运行良好(控制台的日志确认了这一点),我什至得到了成功的结果(XML 请求的 readyState 为 4,状态为 200),但我echo
没有似乎出现在任何地方,我的数据库表仍然是空的。我会尝试以某种方式调试 PHP,但似乎它实际上并没有被执行?
让我的 PHP 脚本成为我的扩展的一部分是不是可以?我是否需要将它托管在适当的服务器上(即使只是localhost
)?
这是我第一次开发 Chrome 扩展程序(以及编码 Javascript 和 PHP,就此而言),我担心我犯了一些非常基本的错误,以至于尽管我进行了搜索,但我无法找到它的解决方案