脚本载入

本文探讨了JavaScript在网页中不同加载方式及其对DOM操作的影响。通过使用defer属性、window.onload事件和脚本位置调整等手段,确保了脚本执行时机的合理安排。
学习js的时候,经常会遇到这样的问题,如何控制dom、js在页面上的加载顺序。
Peter   Michaux   有一篇文章非常具体地分析了各种控制   js   装载过程的方法和优劣。
结合他的一些做法分析了一下,大致是这样的思路。

首先可能会用到   defer来强制页面加载完成后来再运行js,像这样:

<script   src="x.js"   type="text/javascript"   defer> </script>
看似用起来没什么问题,但是发现无法兼容Mozilla。

既然这样不行,就只好换种方法,利用   window.onload   来捕获页面的载入事件。
在js文件里:

window.onload   =   function()   {
alert("load   over");
}
这一切的一切想必大家都是很熟悉的了,但是,之后就没有问题了么?假设页面dom里有一张图片,像这样:

<img   src="picture.jpg"   >
而这张图片又非常之大,那么在dom加载完毕之前,js是无法执行的。问题就在于假设dom提供了用户交互的功能。例如按钮,输入表单等,这个时候他们已经是被呈现了的,因此就很有可能产生无效的用户行为。
我们不能指望用户会安分守己地等待页面显示加载完毕后再发生动作,而要把用户考虑成随时随刻会到处乱点的朋友。

这个问题又如何解决呢?既然我们需要页面结构输出后执行js,我们不妨把js入口函数定义在页面最下面好了。

<head>
    <script   src="x.js"   type="text/javascript"> </script>
</head>
<body>
      ......
    <img   src="picture.jpg"   >
    <script   type="text/javascript"> init(); </script>
</body>
这样就达到我们的目的了,页面结构输出完毕后就执行js,不用考虑图片的加载。

但是在文档末尾嵌入一条js脚本,毕竟容易被忽略,把关键的程序入口放在这种渺小的角落,总觉得不太合适。那有什么预留退路的方法没有呢?
我们可以把结尾的脚本稍微修改一下:

<head>
    <script   src="x.js"   type="text/javascript"> </script>
</head>
<body>
      ......
    <img   src="picture.jpg"   >
<script   type="text/javascript"> window.onload(); </script> </body>
而在js里预先把入口定义给onload事件:

window.onload   =   function()   {
alert("load   over");
}
这时候页面结构加载完毕后就会调用onload函数,而即使漏写了dom里的onload入口,js自身里的onload定义也会在页面加载完毕后执行,这样退路就留出来了。
不过这时候有个问题,onload事件会执行两次,可以在js的onload实现里解决这个问题,改成这样:

var   flag   =   false;
window.onload   =   function()   {
    if   (flag)   {return;}
      flag=   true;
      alert("load   over");
}
这样似乎已经解决我们所有的问题了,不过仍然有些小遗憾,因为最后一行代码,致使行为与结构没有分离开来,要   unobtrusive   就要   unobtrusive   的彻底,为了达到完美的分离,还有很大的讨论空间。

而对于js文件内部的onload事件,我们还可以参考   Simon   Willison       的addLoadEvent函数来优化:

function   addLoadEvent(func)   {
    var   oldonload   =   window.onload;
    if   (typeof   window.onload   !=   'function')   {
          window.onload   =   func;
      }   else   {
          window.onload   =   function()   {
            if   (oldonload)   {
                  oldonload();
              }
              func();
          }
      }
}
然后,我们就可以在js里肆无忌惮地不停地将各个不同的函数添加到onload事件响应中了:


addLoadEvent(funcA);
addLoadEvent(funcB);
addLoadEvent(funcC);
当然,同一个js里设置多个onload响应函数其实没什么必要,我们完全可以把funcA、funcB、funcC封装在一个函数里add,addLoadEvent函数,更理想的状态是为页面动态调用的多个js文件添加入口。 
<think>好的,用户的问题是关于如何在ArcGIS Pro中加载脚本。我需要先回顾一下已有的引用内容,看看是否有相关的信息。引用[1]提到了创建Python脚本工具的步骤,包括创建脚本、设置参数等。引用[2]和[3]展示了具体的脚本工具应用案例,比如处理样式符号和修复CAD数据源。引用[4]虽然涉及DEM构建,但可能不相关。 用户可能想知道如何将自己的Python脚本集成到ArcGIS Pro中,作为工具使用。根据引用[1],步骤大致是创建脚本,然后创建脚本工具,设置参数。需要详细说明每个步骤,比如如何新建工具箱,添加脚本,配置参数,并测试工具。 另外,用户可能需要知道如何直接运行脚本,而不仅仅是创建工具。因此,应该包括两种方法:通过工具箱创建脚本工具,以及直接运行脚本文件。还要注意脚本的参数设置和调试,确保用户能正确使用。需要检查是否有遗漏的步骤,比如权限问题或路径设置,但现有引用中没有提到这些,可能不需要深入。</think>### ArcGIS Pro 加载脚本的步骤详解 在 ArcGIS Pro 中加载脚本主要通过创建**自定义脚本工具**实现,以下是具体操作流程: --- #### **方法1:通过工具箱创建自定义脚本工具** 1. **新建工具箱** - 打开 ArcGIS Pro 工程,在目录窗格中右键点击项目文件夹,选择 **新建 > 工具箱**,命名为自定义工具箱(例如 `MyScriptTools.tbx`)。 2. **添加脚本工具** - 右键新建的工具箱,选择 **新建 > 脚本**,输入工具名称和标签(如“地类符号匹配工具”),点击下一步。 3. **绑定Python脚本文件** - 在脚本文件路径中选择已编写好的 `.py` 文件(需确保脚本逻辑正确且包含参数接收功能),例如[引用2]中提到的样式符号属性对调脚本。 4. **设置脚本参数** - 在参数设置界面,按脚本需求添加输入和输出参数。例如: - **输入参数**:地类代码字段、地类名称字段(类型为“字段”)[^2] - **输出参数**:修改后的样式文件路径(类型为“文件”) - 每个参数需指定名称、数据类型、方向(输入/输出)等属性[^1]。 5. **调试与验证** - 完成参数设置后,点击“完成”生成工具。右键工具选择 **打开**,输入参数测试功能,观察是否输出预期结果(如符号属性成功对调)[^2]。 --- #### **方法2:直接运行Python脚本** 1. **在Pro中打开Python窗口** - 点击菜单栏 **分析 > Python > Python窗口**,打开交互式终端。 2. **导入脚本并执行** - 使用 `import` 导入自定义模块,或通过 `exec(open("脚本路径.py").read())` 直接运行脚本文件。 - 示例: ```python exec(open(r"C:\Scripts\FixCADDataSource.py").read()) # 引用3中的CAD数据源修复脚本 ``` --- #### **关键注意事项** 1. **脚本参数接收** - 脚本中需通过 `arcpy.GetParameterAsText()` 接收工具参数。例如: ```python input_layer = arcpy.GetParameterAsText(0) # 获取第一个输入参数 ``` 参考引用[1]中提到的“编辑工具代码以接收参数”步骤[^1]。 2. **依赖库与路径** - 若脚本依赖第三方库(如 `sqlite3` 处理样式文件[^2]),需在Pro的Python环境中提前安装。 3. **调试与日志** - 使用 `arcpy.AddMessage()` 输出调试信息,在工具运行结果中查看日志。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值