You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome扩展通过XML请求调用内置PHP文件无法执行如何解决?

问题核心原因

PHP是服务端脚本语言,必须运行在搭载了PHP解析器的Web服务器环境中才会被执行。Chrome扩展的本地文件是作为静态资源返回的,你请求扩展包内的my_php_file.php时,浏览器只会返回PHP的源代码文本,不会执行其中的逻辑,这就是你看到请求状态200但没有执行效果的根本原因。

解决方案

1. 部署PHP文件到服务器

不能将PHP脚本放在扩展包内,必须将其部署到支持PHP运行的环境中,可选方案包括:

  • 本地搭建环境:使用XAMPP、WAMP等集成工具一键搭建本地PHP+Web服务器环境,将PHP文件放入站点根目录
  • 线上部署:上传到支持PHP的虚拟主机、云服务器等线上环境

2. 修改Chrome扩展配置与代码

调整manifest.json权限

Manifest V3需要添加host_permissions配置,允许扩展请求你部署PHP的服务器地址,避免跨域拦截,示例:

{
  "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"]
    }
  ],
  // 新增权限配置
  "host_permissions": [
    "http://localhost/*" // 替换为你实际部署PHP的域名/IP地址
  ]
}

修改content.js请求逻辑

将请求地址替换为你部署后的PHP访问地址,同时对参数做编码处理避免特殊字符异常:

// 替换为你实际的PHP部署地址
const phpUrl = "http://localhost/my_php_file.php";
const query = phpUrl + "?par1=" + encodeURIComponent(var1) + "&par2=" + encodeURIComponent(var2) + "&par3=" + encodeURIComponent(var3) + "&par4=" + encodeURIComponent(var4);
console.log(query);

const xhr = new XMLHttpRequest();
xhr.onerror = function() {console.log('error');};
// 新增请求成功回调,可打印返回结果调试
xhr.onload = function() {
  console.log('PHP返回结果:', xhr.responseText);
};
xhr.open("GET", query, true);
xhr.send();

3. 修复PHP代码问题

原PHP代码存在SQL注入风险,且预处理API调用错误,修正后的参考代码:

<?php
// 允许跨域请求,避免扩展请求被拦截
header("Access-Control-Allow-Origin: *");
header("Content-Type: text/plain; charset=utf-8");

$var1 = $_GET['par1'] ?? '';
$var2 = $_GET['par2'] ?? '';
$var3 = $_GET['par3'] ?? '';
$var4 = $_GET['par4'] ?? '';

$con = mysqli_connect('[host name]', '[user name]', '[password]', '[db name]', 端口号);
if (!$con) {
  die('数据库连接失败: ' . mysqli_error($con));
}

// 使用预处理语句避免SQL注入
$stmt = mysqli_prepare($con, "INSERT INTO myTable (col1, col2, col3, col4) VALUES (?, ?, ?, ?)");
// 第二个参数为类型标识:s=字符串 i=整型,根据你实际字段类型调整
mysqli_stmt_bind_param($stmt, "ssss", $var1, $var2, $var3, $var4);
mysqli_stmt_execute($stmt);

if(mysqli_stmt_affected_rows($stmt) > 0) {
  echo "数据插入成功";
} else {
  echo "插入失败:" . mysqli_stmt_error($stmt);
}

mysqli_stmt_close($stmt);
mysqli_close($con);
?>
调试方法

先单独验证PHP功能:直接在浏览器地址栏输入带测试参数的PHP地址,比如http://localhost/my_php_file.php?par1=test1&par2=test2&par3=test3&par4=test4,查看页面输出和数据库是否有数据,确认PHP逻辑正常后再调试扩展的请求部分。

内容的提问来源于stack exchange,提问作者KMS92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:30:05