※ 引述《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(...)。