首页 > 解决方案 > 无法在“文档”上执行“写入”[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.

不幸的是,我无法更改任何脚本代码,因此删除 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,因为他们在糟糕的代码周围抛出了 CORS。通过绕过CORS,获取脚本并用append()替换document.write(),我设法得到了我需要的东西。很高兴与任何有同样问题的人分享让这个工作的代码,希望听到更好的解决方案。

标签: javascriptreactjsmailchimp

解决方案


推荐阅读