Javascript 未能执行';写';在';文件';[MailChimp存档嵌入]

Javascript 未能执行';写';在';文件';[MailChimp存档嵌入],javascript,reactjs,mailchimp,Javascript,Reactjs,Mailchimp,我正在尝试将脚本加载到基于React的站点上,但遇到问题,因为该脚本是一个document.write()行,这会导致以下错误: Failed to execute 'write' on 'Document': It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened. 不幸的是,我无法更改脚本的任何代码,因此删

我正在尝试将脚本加载到基于React的站点上,但遇到问题,因为该脚本是一个document.write()行,这会导致以下错误:

Failed to execute 'write' on 'Document': It isn't possible to write into a document from an 
asynchronously-loaded external script unless it is explicitly opened.
不幸的是,我无法更改脚本的任何代码,因此删除document.write()并用其他内容替换它不是一个选项,至少服务器端不是这样。我的想法是,我可以先检索代码,重写它,然后用我的更正运行它。我发现检索代码也很困难

脚本源代码使用CORS,因此我最初使用fetch来检索代码的想法是错误的,因为不允许跨源代码。如果您错过了,我没有访问服务器的权限,因此更改CORS也不是一个选项

我目前正在尝试使用回调来访问脚本的代码,但我也遇到了一些问题。我想知道的是,是否有更简单的方法来访问脚本从源代码加载的代码,最好是在浏览器尝试运行它之前

编辑#1:脚本来自MailChimp。您传入一些信息,它会返回一个document.write()行,该行在末尾生成。我希望这能解释为什么我不能更改脚本,为什么我不能更改CORS。我知道一种绕过CORS问题的方法(在我的服务器上设置一个从MailChimp获取数据的API端点可以让我绕过CORS),但我正在寻找更简单的方法。我相信,正如@Jimmy Breck McKye所建议的那样,通过iframe加载脚本并访问innerHTML可能是一种方法


编辑#2:@Jimmy Breck McKye也认为这可能是一个X/Y问题,情况可能就是这样。我需要该脚本提供的数据,但该脚本是垃圾,因为它使用document.write()。从脚本中读取数据只能通过ajax请求完成,但MailChimp无法做到这一点,因为他们在糟糕的代码周围抛出了COR。通过遍历CORS,获取脚本,并将document.write()替换为append(),我已经获得了所需的内容。很高兴与任何有相同问题的人分享使其工作的代码,希望听到更好的解决方案。

您希望如何使这些脚本互操作?调用document.write意味着外部脚本打算呈现整个页面——这将是一个问题,即使您确实找到了截取其内容的方法。也许你可以打开一个iframe,让它在其中运行?不,如果你因为SOP而无法访问它(CORS没有解除它),那么你也无法以任何方式访问源代码。为什么你需要这个脚本,为什么你不能更改它?您不应该在页面上运行您无法控制的脚本。@Bergi是对的。像这样运行第三方代码是自找麻烦。这感觉像是一个X/Y问题您永远不应该运行使用document.write的脚本,因为这样的脚本来自20世纪90年代!:您希望如何使这些脚本互操作?调用document.write意味着外部脚本打算呈现整个页面——这将是一个问题,即使您确实找到了截取其内容的方法。也许你可以打开一个iframe,让它在其中运行?不,如果你因为SOP而无法访问它(CORS没有解除它),那么你也无法以任何方式访问源代码。为什么你需要这个脚本,为什么你不能更改它?您不应该在页面上运行您无法控制的脚本。@Bergi是对的。像这样运行第三方代码是自找麻烦。这感觉像是一个X/Y问题您永远不应该运行使用document.write的脚本,因为这样的脚本来自20世纪90年代!:D