将实际的 .js 文件作为源从一个域拉入另一个域时是否重要

does it matter if you use an actual .js file when pulling it in as source from one domain to another

有点奇怪的问题,但我在 Google 上找不到任何关于它的信息。拉入 .js 文件时,如以下代码 (Facebook Dev):

(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src =     "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.4&appId=111111";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

他是什么 js.src 类似于 //connect.facebook.net/en/sdk 并且该页面上的所有 javascript 代码都只是纯文本。将它放在脚本标签之间会使它充当 javascript。我做了一些测试,它似乎工作正常,但我确信我遗漏了一些东西。

简而言之,这可以/安全/稳定吗?

2 件事。首先,您的源文件实际上是一个 js 文件 (connect.facebook.net/en_US/sdk.js),其中包含一些数据。我试着打开完整的和简短的 url,它们似乎是同一个源文件,所以如果你只是使用 connect.facebook.net/en_US/sdk.js.

应该没关系

其次,您可以使用 type="text/javascript" 的开始脚本标签 或者您可以使用 document.createElement('script') 方式在脚本标记本身内声明它,就像您对 (document, 'script', 'facebook-jssdk').

两种方式都可以,但是有一个很好的 post 解释了差异 here

此外,您按照 facebook SDK instructions recommend 的方式进行操作,所以我确信它是安全的。 ;-)

两个都很好。只需添加更多层,例如避免重复插入相同的脚本。

这只是创建一个 DOM 元素,如下所示:

<script id="facebook-jssdk" src="//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.4&appId=111111" />

一步一步:

(function(d, s, id) { // function with 3 arguments
  // Because of the call below, the arguments are:
  // d = document
  // s = "script"
  // id = "facebook-jssdk"
  var js, fjs = d.getElementsByTagName(s)[0]; // Gets all elements of type "script"
  if (d.getElementById(id)) return; // Checks if any of the existent elements have the id "facebook-jssdk", to not doubleinsert
  js = d.createElement(s); js.id = id; // Creates an element of type "script" and sets the id
  js.src =     "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.4&appId=111111"; // Sets the source
  fjs.parentNode.insertBefore(js, fjs); // Inserts the script
}(document, 'script', 'facebook-jssdk')); // calls the function above with 3 parameters

所以是的,它实际上会认为该文件是一个 javascript 文件,因为它的加载方式与通常使用其他脚本的方式相同。