※ 引述《ettoolong (ettoolong)》之銘言:
: ※ 引述《danny0838 (道可道非常道)》之銘言:
: : 4. 禁止 chrome.tabs.executeScript 用「code」執行程式碼文字
: 不確定有沒有影響, 腳本類的套件可以先把自己的腳本用 content script 注入,
: 然後把原本要用 chrome.tabs.executeScript 執行的 code 用 message
: 送給自己已經在 tab 執行的 content script, 讓該 script 用 eval 的方式執行.
: 但是 AMO 早就禁止使用 eval, 但是不確定 chrome web store 有沒有擋 eval,
: 有擋的話就應該死了, 因為直接不允許你用動態的方式生成 script.
測試了一下,V3 還有一個改變,我補充在原PO了:
* content script 禁止執行 eval 類函數(Manifest V2 可以)
而經測試,content script 在 DOM 插入 script 元素時,
script 是視為在 content script 執行(而不是視為 page script)
所以想在 content script 執行類似以下腳本的方式也是不通:
var s = document.createElement('script');
s.innerText = "alert('test');";
document.body.appendChild(s);
s.remove();
目前發現這樣寫可以繞過:
var s = document.createElement('span');
s.setAttribute('onclick', 'alert("arbitrary code");');
document.body.appendChild(s);
s.click();
s.remove();
但不曉得未來會不會也被封死就是...
但就算這樣可以,
要讓 page script 和 extention script 溝通是很困難的,
因為不像 content script 可以用 chrome.runtime.sendMessage(...)。