| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 | 
							- <?php
 
- class BrowserExtBuild
 
- {
 
-     protected $originSource = "";
 
-     public $buildDir = "";
 
-     public $zipDir = "";
 
-     public $zipName = "";
 
-     private $info = [];
 
-     public $manifest = array(
 
-         'name' => '',
 
-         'description' => '',
 
-         'version' => '',
 
-         'manifest_version' => 3,
 
-         'icons' => array(
 
-             '64' => 'icon/64.png',
 
-             '128' => 'icon/128.png',
 
-             '192' => 'icon/192.png'
 
-         ),
 
-         'externally_connectable' => array(
 
-             'matches' => array(
 
-                 '*://go.mtab.cc/*'
 
-             )
 
-         ),
 
-         'background' => array(
 
-             'service_worker' => 'src/background.js'
 
-         ),
 
-         'permissions' => array(
 
-             'background',
 
-             'cookies',
 
-             'bookmarks',
 
-             'favicon'
 
-         ),
 
-         'action' => array(
 
-             'default_icon' => 'icon/64.png',
 
-             'default_title' => ''
 
-         ),
 
-         'host_permissions' => array(
 
-             '*://go.mtab.cc/*'
 
-         ),
 
-         'chrome_url_overrides' => array(
 
-             'newtab' => 'dist/index.html'
 
-         )
 
-     );
 
-     function __construct($info)
 
-     {
 
-         $this->info = $info;
 
-         $this->originSource = root_path('extend/browserExt');
 
-         $this->buildDir = runtime_path('browserExt');
 
-         $this->zipName = "browserExt.zip";
 
-         $this->zipDir = public_path() . $this->zipName;
 
-     }
 
-     function runBuild()
 
-     {
 
-         if (is_dir($this->buildDir)) {
 
-             $this->deleteDirectory($this->buildDir);
 
-         }
 
-         $this->copyDir($this->originSource, $this->buildDir);
 
-         $this->copyDir(public_path() . "dist/", $this->buildDir . "/dist/");
 
-         $this->delZip();
 
-         $this->copyIcon();
 
-         $this->renderManifest();
 
-         $this->renderIndex();
 
-         $this->renderInitJavascript();
 
-         $this->createZipFromDir($this->buildDir, $this->zipDir);
 
-         if (is_dir($this->buildDir)) {
 
-             $this->deleteDirectory($this->buildDir);
 
-         }
 
-         return true;
 
-     }
 
-     function renderIndex()
 
-     {
 
-         $file = $this->buildDir . "dist/index.html";
 
-         $f = file_get_contents($file);
 
-         $option = [];
 
-         $option['title'] = $this->info['ext_name'];
 
-         $option['customHead'] = '<script src="../src/init.js"></script>';
 
-         $option['description'] = $this->info['ext_description'];
 
-         $option['favicon'] = "/icon/64.png";
 
-         $option['keywords'] = '';
 
-         $option['version'] = $this->info['ext_version'];
 
-         $content = \think\facade\View::display($f, $option);
 
-         file_put_contents($file, $content);
 
-     }
 
-     function renderInitJavascript()
 
-     {
 
-         $file = $this->buildDir . 'src/init.js';
 
-         $f = file_get_contents($file);
 
-         $host = explode(':', $this->info['ext_domain'])[0];
 
-         $f = preg_replace("/extDomain/", $host, $f);
 
-         $f = preg_replace('/extUrl/', $this->info['ext_protocol'] . "://" . $this->info['ext_domain'], $f);
 
-         file_put_contents($file, $f);
 
-     }
 
-     function renderManifest()
 
-     {
 
-         $host = explode(":", $this->info['ext_domain'])[0];
 
-         $this->manifest['version'] = $this->info['ext_version'];
 
-         $this->manifest['name'] = $this->info['ext_name'];
 
-         $this->manifest['description'] = $this->info['ext_description'];
 
-         $this->manifest['action']['default_title'] = $this->info['ext_name'];
 
-         $this->manifest['externally_connectable']['matches'] = ["*://{$host}/*"];
 
-         $this->manifest['host_permissions'] = ["*://{$host}/*", '*://*.baidu.com/*'];
 
-         file_put_contents(joinPath($this->buildDir, "manifest.json"), json_encode($this->manifest, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
 
-     }
 
-     //处理logo问题
 
-     function copyIcon()
 
-     {
 
-         if (!is_dir(joinPath($this->buildDir, 'icon'))) {
 
-             mkdir(joinPath($this->buildDir, 'icon'));
 
-         }
 
-         copy(joinPath(public_path(), $this->info['ext_logo_64']), joinPath($this->buildDir, "icon/64.png"));
 
-         copy(joinPath(public_path(), $this->info['ext_logo_128']), joinPath($this->buildDir, "icon/128.png"));
 
-         copy(joinPath(public_path(), $this->info['ext_logo_192']), joinPath($this->buildDir, "icon/192.png"));
 
-     }
 
-     //删除升级包
 
-     function delZip()
 
-     {
 
-         if (file_exists($this->zipDir)) {
 
-             unlink($this->zipDir);
 
-         }
 
-     }
 
-     function createZipFromDir($source_dir, $output_file_path)
 
-     {
 
-         $zip = new ZipArchive();
 
-         if ($zip->open($output_file_path, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) {
 
-             // 递归地添加目录中的文件和子目录到压缩包
 
-             $files = new RecursiveIteratorIterator(
 
-                 new RecursiveDirectoryIterator($source_dir),
 
-                 RecursiveIteratorIterator::LEAVES_ONLY
 
-             );
 
-             foreach ($files as $name => $file) {
 
-                 // 跳过 "." 和 ".." 目录
 
-                 if (!$file->isDir()) {
 
-                     $filePath = $file->getRealPath();
 
-                     $relativePath = mb_substr($filePath, mb_strlen(dirname($source_dir)) + 1);
 
-                     $zip->addFile($filePath, $relativePath);
 
-                 }
 
-             }
 
-             // 关闭压缩包
 
-             $zip->close();
 
-             return true;
 
-         } else {
 
-             abort(0, '无法创建压缩文件');
 
-         }
 
-     }
 
-     // 递归复制目录及其内容
 
-     function copyDir($source, $dest)
 
-     {
 
-         if (!is_dir($dest)) {
 
-             mkdir($dest, 0777, true);
 
-         }
 
-         $files = scandir($source);
 
-         foreach ($files as $file) {
 
-             if ($file !== '.' && $file !== '..') {
 
-                 $src = $source . '/' . $file;
 
-                 $dst = $dest . '/' . $file;
 
-                 if (is_dir($src)) {
 
-                     $this->copyDir($src, $dst);
 
-                 } else {
 
-                     copy($src, $dst);
 
-                 }
 
-             }
 
-         }
 
-     }
 
-     //递归删除目录
 
-     function deleteDirectory($dir)
 
-     {
 
-         if (!is_dir($dir)) {
 
-             return;
 
-         }
 
-         $files = scandir($dir);
 
-         foreach ($files as $file) {
 
-             if ($file != '.' && $file != '..') {
 
-                 if (is_dir("$dir/$file")) {
 
-                     $this->deleteDirectory("$dir/$file");
 
-                 } else {
 
-                     unlink("$dir/$file");
 
-                 }
 
-             }
 
-         }
 
-         rmdir($dir);
 
-     }
 
- }
 
 
  |