我想将一些 javascript 从一个文件发送到我自己的服务器中的另一个文件。例如,在文件 1 上我有以下代码:
<script>
alert("Hey There!");
</script>
我想将此代码发送到文件 2,以便在文件 2 上发生警报。假设文件 2 已经加载,我想对文件 1 执行一些处理,并根据我要发送的所述处理的结果文件 2 中的内容。
文件 2 不应向文件 1 发送任何请求,文件 1 应执行所有发送操作,文件 2 应在不刷新页面的情况下接收消息。
这可能吗?
编辑
假设我有 3 个文件(2 个 html 和 1 个 js)。文件 A 已经加载,里面什么也没有。该js文件名为“sayHello.js”,其内容如下:
alert('Indeed 10 is less than 100');
文件B包含以下内容:
if (10 < 100) {
// attach the js file "sayHello.js" to File A
}
如何将 js 文件从文件 B 附加到文件 A(使用 jQuery.getScript() 方法)并在文件 A 上执行脚本?
最佳答案
通常 - 您必须在思考中区分哪些代码在服务器上运行,哪些代码在浏览器上运行。 在更复杂的情况下 - 在客户端上运行的 JavaScript 将由服务器页面生成,该服务器页面根据请求上下文生成相关 JavaScript - 在这种情况下,您必须牢记操作顺序。
假设您引用客户端上代码之间的通信 - 您应该记住这些文件不处理任何内容 - 它们将 JavaScript 代码加载到浏览器的根范围,然后浏览器执行它。 以这种方式,您必须区分命令和定义,而加载的每个文件都可以访问由以前加载的脚本引入根范围的所有“成员”(这些成员的正确名称是符号,即 - 所有函数和变量)。
讨论您的两个文件 - 文件 2 对我来说看起来像“主文件”,文件 1 对我来说看起来像“实用程序/库”。
因此,您必须定义函数,而不是在文件 1 的根作用域上执行代码 - 文件 2 可以访问这些函数。
您的 HTML:
<script src="File1.js"></script>
<!-- if you need to exectute the code in File1 - you can call it like this -->
<script>
actionInFile1()
</script>
<script src="File2.js"></script>
文件1:
function actionInFile1(){
alert("Hey There!")
}
文件2:
actionInFile1();
考虑到这一点 - 我认为您所描述的是向客户端动态加载脚本。
使用 jQuery 将第二个脚本动态添加到当前页面,方法是使用 http://api.jquery.com/jQuery.getScript/
现在 - 一个更复杂的例子 - 您的 HTML
<script src="jQuery.....js"></script>
<script src="File1.js"></script>
<button value=" go " onclick="toTrick()">
文件1.js
function doStuff(){
alert("Hey there!");
}
文件2.js
function toTrick(){
$.getScript('ajax/test.js'
, function() {
doStuff();
}
);
}
编辑:
您需要了解 JavaScript 中的变量作用域。
文件A包含以下内容:
function notify(){
alert('Indeed 10 is less than 100');
}
notify();
文件B包含以下内容:
if (10 < 100) {
//notify is defined in file A, however it will be accessible here
// as long as file A is loaded before file B.
notify();
}
HTML 具有以下内容:
<script src="FileA.js"></script><!-- defines "notify" and executes it immediately -->
<script src="FileB.js"></script><!-- reuses notify() -->
关于javascript - 如何使用 JavaScript 或 jQuery 将脚本从一个页面发送到另一个页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5281414/