如何让我的用户脚本在隔离沙箱和 unsafeWindow 中执行代码?

Posted

技术标签:

【中文标题】如何让我的用户脚本在隔离沙箱和 unsafeWindow 中执行代码?【英文标题】:How do I make my userscript execute code in isolated sandbox and unsafeWindow too? 【发布时间】:2021-01-03 00:01:02 【问题描述】:

对于我的用户脚本中的大部分代码,我需要在我的脚本执行的网站上使用unsafeWindow。我通过使用// @grant unsafeWindow 来做到这一点。但是,我的一些代码无法使用unsafeWindow 执行,需要在 Tampermonkey 的隔离沙箱中运行。我怎么能做到这一点?像这样的东西可以工作:

function disableUnsafeWindow() 
    // Disable UnsafeWindow


function enableUnsafeWindow() 
    // Enable unsafeWindow

function withUnsafeWindow() 
    enableUnsafeWindow()
    // Run the code using unsafeWindow


function withoutUnsafeWindow() 
    disableUnsafeWindow();
    // Remove unsafeWindow access and execute the code without unsafeWindow


withUnsafeWindow()
withoutUnsafeWindow()

【问题讨论】:

【参考方案1】:

默认情况下使用具有特权用户脚本功能的隔离沙箱。然后,对于需要使用原生页面的代码,可以将代码插入到<script>标签中,例如:

const fnToRunOnNativePage = () => 
  console.log('fnToRunOnNativePage');
;

const script = document.body.appendChild(document.createElement('script'));
script.textContent = '(' + fnToRunOnNativePage.toString() + ')();';
// to use information inside the function that was retrieved elsewhere in the script,
// pass arguments above
script.remove();

【讨论】:

以上是关于如何让我的用户脚本在隔离沙箱和 unsafeWindow 中执行代码?的主要内容,如果未能解决你的问题,请参考以下文章

android安全沙箱机制是基于啥

一文彻底搞懂前端沙箱

如何让我的 init.d 脚本更改用户

如何创建 Java 沙箱?

如何在沙箱中使用 Rhino for Java 运行 Javascript?

沙箱是啥