【问题标题】:Pass GET parameters to jsfiddle embedded version将 GET 参数传递给 jsfiddle 嵌入式版本
【发布时间】:2018-08-07 17:04:10
【问题描述】:

我在我的网站中使用 jsfiddle 的嵌入式版本,如下所示:

<script async src="//jsfiddle.net/mebibou/va5pu0bd/embed/"></script>

我尝试在该 url 中传递参数,例如 ?foo=bar,但我在控制台中从该 url 上的脚本中收到错误:

Uncaught TypeError: Cannot read property 'parentNode' of null
    at createEmbedFrame (?foor=bar:19)
createEmbedFrame @ ?foor=bar:19
setTimeout (async)
(anonymous) @ ?foor=bar:43
(anonymous) @ ?foor=bar:45

(可以看到这里执行的代码:http://jsfiddle.net/mebibou/va5pu0bd/embed/?foo=bar) 我还尝试使用嵌入的 iframe 版本,但它在其中加载了另一个 iFrame,删除了我放置的 url 参数。有可能吗?我想要做的是将参数从我的网站传递给 jsfiddle 代码,并认为 url 参数将是最简单的方法

【问题讨论】:

  • 我想你没有分享错误信息,因为你认为它与问题无关,但如果它是在你加载小提琴的那一刻触发的,那么之后可能会有关系全部。您能否编辑问题并将其包含在内?
  • @ÁlvaroGonzález 是的,我认为它不那么相关,因为这是 jsfiddle 嵌入其代码的方式,但我已经编辑了一个简单的实时示例以使其更加完整,谢谢
  • 谢谢。这足以重现问题。我得到的是TypeError: target is nulltarget.parentNode.insertBefore(iframe, target.nextSibling).,本质上是相同的错误。

标签: javascript parameters jsfiddle


【解决方案1】:

如果您从路径组件中删除尾部斜杠,错误就会消失:

<script async src="//jsfiddle.net/mebibou/va5pu0bd/embed/?foo=bar"></script>
                                                        ^
<script async src="//jsfiddle.net/mebibou/va5pu0bd/embed?foo=bar"></script>

发生错误是因为jsfiddle.net 服务器在编写uriOriginal 变量时去掉了这样的斜线:

var uriOriginal           = "http://jsfiddle.net/mebibou/va5pu0bd/embed?foo=bar"

这会导致 CSS 选择器与您的 &lt;script&gt; 标记不匹配:

var uriOriginal           = "http://jsfiddle.net/mebibou/va5pu0bd/embed?foo=bar"
var uriOriginalNoProtocol = uriOriginal.split("//").pop()
var target                = document.querySelector("script[src*='" + uriOriginalNoProtocol + "']")
console.log("script[src*='" + uriOriginalNoProtocol + "']", target);

但是,如果您的 &lt;script&gt; 标签省略了斜线,则选择器匹配。

尽管这个 hack 只是防止错误并允许 fiddle 加载和运行,但毫无价值。它不会将原始 URL 参数传输到最终的 iframe,因为它的路径已经硬编码在服务器生成的 JavaScript 代码中:

var uriEmbedded = "http://jsfiddle.net/va5pu0bd/embedded/?username=mebibou")
iframe.src               = uriEmbedded
target.parentNode.insertBefore(iframe, target.nextSibling)

综上所述,传递 URL 参数可能是不支持的场景。

【讨论】:

  • 不起作用,这样做会添加一个带有 src="http://jsfiddle.net/va5pu0bd/embedded/?username=mebibou" 的 iframe,因此删除了 foo=bar 参数
  • @Guillaume 正确,我没有走得那么远。这只会使小提琴负载。 iframe 是硬编码的 (var uriEmbedded = "http://jsfiddle.net/va5pu0bd/embedded/?username=mebibou")。
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 2018-12-10
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
相关资源
最近更新 更多