2

我使用了示例項目 https://developer.chrome.com/extensions/samples 我能夠運行python本機應用程序。Chrome擴展 - 郵件傳遞到批處理文件

有什麼辦法,以原生的消息,例如,host.bat內得到的消息

我不希望加載python腳本

我想在這裏做的是從 發送消息鉻{文字:「xyz.bat」}

和批處理文件應該運行START xyz.bat

+2

Windows批處理對於此目的是一個可怕的選擇。如果您想繼續,只需瞭解如何從標準輸入讀取原始數據(不含換行符)。請參閱https://stackoverflow.com/questions/24764657/how-do-i-use-a-shell-script-as-chrome-native-messaging-host-application關於使用bash的想法(也是一種shell腳本語言)作爲本地消息傳遞主機,您可以應用相同的推理在您的.bat腳本中構建本機消息傳遞主機。 –

+1

感謝您的建議,我用那裏示例python代碼,並使用py2exe使其可執行 現在我通過擴展名的文件路徑,並檢查如果文件存在我的python代碼並將它傳遞給os.system() 再次感謝指導! – strike123

+1

我希望你做適當的輸入清理(即檢查要執行的行是否在允許的路徑內),因爲現在看起來你已經在擴展中打開了一個巨大的安全問題。如果攻擊者有辦法調用本地消息傳遞主機(通常是Chrome和/或您的擴展中的錯誤組合),那麼您的系統會受到完全損害。 –

回答

-1

方法這個問題從批處理文件的角度來看,應該在李它需要程序先行運行,這在大多數應用程序中被折舊,有利於在後臺運行它。 不過,如果你還是想知道你怎麼可能做到這一點在批...

如果你可以將消息傳遞給一個空白的html頁面(目前不知道你怎麼能或者想要做這種方式) ,在那個HTML頁面上唯一的東西是你的runme.bat我們可以運行一個程序來複制頁面,打開一個文本文件並粘貼它,關閉文本文件並運行帶有輸入的批處理。所以代碼明智的,

@if (@CodeSection == @Batch) @then 
@echo off 
set SendKeys=CScript //nologo //E:JScript "%~F0" 

rem below copys everything on the page, and closes it 
%SendKeys% "{TAB}" 
%SendKeys% "^{A}" 
%SendKeys% "^{C}" 
%SendKeys% "^{W}" 

rem open text file,wait for it load, paste clipboard, save and exit 

start newreadforme.txt 
timeout /nobreak /t 5 
%SendKeys% "^{V}" 
%SendKeys% "^{S}" 
timeout /nobreak /t 2 
%SendKeys% "^{W}" 
start program.bat 
goto :EOF 
@end 
// JScript section 
var WshShell = WScript.CreateObject("WScript.Shell"); 
WshShell.SendKeys(WScript.Arguments(0)); 

然後在批處理文件

@echo off 
set /p x=<newreadforme.txt 
start %x% 

此代碼將打開的頁面上運行模擬按鍵來複制其內容並轉發到一個文本文件,以從另一個批處理文件中引用。 但是,你應該只使用這種方法作爲最後的手段,因爲這種方法是解決你的問題的一種可怕的方式。我的代碼要求您保持網頁的開放性,並確保在執行過程中沒有人干擾該程序。因此,如果用戶在運行時使用計算機,那麼他們可能會意外地混淆輸入。

最重要的是,您已經需要修改網頁以實現最終結果,因此您可能應該使用支持html的文件系統操作Nodejs can provide a nice interface between the file system和您可能決定通過的html頁面。如何處理網頁充滿了我不確定的消息,但您絕對應該避免使用批處理來執行您希望使用的更多HTML友好語言