精华内容
下载资源
问答
  • script-api.jar,php-servlet.jar,php-script.jar,JavaBridge.jar

    千次下载 热门讨论 2016-09-20 14:27:54
    tomcat支持php项目必须的jar包
  • PHP-Script

    热门讨论 2013-10-23 23:30:24
    source insight支持php的配置文件,包括PHP Script.CLF,PHP Styles.cf3
  • NativeScript可以用javascript来写Android和iOS的应用,如下图所示NativeScript的代码与网页开发的代码很相似,都是用CSS写样式,javascript写业务逻辑,不同的是NativeScript使用XML来描述页面结构(NativeScript...

    1. 基础知识

    1.1 为什么选择NativeScript

    1.1.1 什么是NativeScript

    NativeScript可以用javascript来写Android和iOS的应用,如下图所示NativeScript的代码与网页开发的代码很相似,都是用CSS写样式,javascript写业务逻辑,不同的是NativeScript使用XML来描述页面结构(NativeScript封装了自己的UI库)。

    1.1.2 移动端开发方式的对比

    如下图所示, 移动应用程序可分为四大类:native, hybrid, cross compiled, and just-in-time (JIT) compiled

    让我们根据下图一起看一看不同类型的移动应用程序之间的差异以及它们如何在设备上运行
    hybrid app本质上是在web浏览器中运行的网页。cross compiled app通过编译器被转换成native app。而JIT compiled app(例如NativeScript)运行在一个 JavaScript的虚拟机里。

    1.1.3 NativeScript的优点

    更少的shim代码(处理Android和iOS的不同)、一次写入(Android和iOS共用一套代码)、随处部署等等。

    1.1.4 NativeScript能构建什么样的应用

    因为NativeScript应用程序直接运行在设备上,并由运行在应用程序内部的JavaScript虚拟机解释,这意味着NativeScript应用程序不受访问本机设备api或硬件的限制,因此任何应用程序都可以编写为NativeScript应用。理论上是这样的,但是NativeScript应用程序是在JavaScript虚拟机中运行的,所以在应用程序和裸机之间有一个额外的(尽管很小)抽象层。要从设备中提取每一点性能,所以它不适合构建图形密集的游戏。

    1.1.5 NativeScript是怎么工作的

    • NativeScript Runtime:NativeScript Runtime是连接JavaScript代码和Android和iOS原生API之间的接口代码。就像浏览器制造商教他们的JavaScript虚拟机如何使用DOM和windows对象一样,NativeScript Runtime也教JavaScript虚拟机如何使用本机设备底层的API。
    • NativeScript Core Modules: NativeScriptCore Modules是一组库,这些库是用来构建应用程序并指示NativeScript运行时在设备上做什么。核心模块由不同的库组成,如UI组件(按钮、列表视图、标签)、导航和应用程序。
    • JavaScript virtual machine:理解并执行JavaScript的代码,但是不知道怎么与设备交互,所以NativeScript开发团队编写了接口代码(称为NativeScript Runtime和NativeScript Core Modules)来教JavaScript虚拟机有关Android和iOS等移动设备API的知识。
    • NativeScript CLI:NativeScript CLI抽离了本地工具和SDK的复杂性,为我们提供了一组与平台无关的命令来构建和部署应用程序。

    1.2 第一个NativeScript的应用

    1. 参考文档的Full Setup搭建环境
    2. 页面下载Android Studio然后按照教程配置Android的模拟器
    3. 打开命令行工具,运行tns create HelloWorld --template tns-template-hello-world
    4. 进入目标文件夹cd [filename]
    5. 运行命令tns run android --emulator,即可在Android模拟器上运行代码

    2. 构建应用

    2.1 剖析NativeScript应用程序

    2.1.1 探索NativeScript应用程序的结构

    |- app                 //开发目录
        |- App_Resources   //放置Android和iOS平台特殊的配置,例如App的图标等。
            |- Android
            |- iOS
        |- app.css             //全局的CSS样式,app运行时载入
        |- app.js              //启动文件,里面说明了从哪个页面启动应用
        |- bundle-config.js    //用于配置webpack(如果已安装了)
        |- main-page.js        //写业务逻辑
        |- main-page.xml       //写页面代码
        |- main-view-model.js  //相当于MVVM框架的vm层
        |- package.json        //描述应用程序的特征和依赖项
        |- references.d.ts     //为编辑器提供TypeScript的智能提示
    |- node_modules        //依赖的库文件
    |- platforms           //由NativeScript自动生成和维护
    |- package.json        //描述应用程序的特征和依赖项
    复制代码
    // package.json
    {
        "description": "NativeScript Application",               //提供应用程序、功能和用途的简要说明
        "license": "SEE LICENSE IN <your-license-filename>",     //将协作开发人员指向您的许可文件,以描述其他人必须对您的应用程序代码作出贡献、修改、更改和重新分发哪些权限(可选)
        "readme": "NativeScript Application",                    //指向应用程序的README文件
        "repository": "<fill-your-repository-here>",             //应用程序公共或私有代码存储库的位置(可选)
        "nativescript": {                                        //一个特定于nativescript的部分,带有应用程序的标识符,Android和iOS平台使用它惟一地标识应用程序
            "id": "org.nativescript.myapp"
        },
        "dependencies": {                                        //npm使用的外部库和应用程序所依赖的库版本的列表
            "nativescript-theme-core": "~1.0.2",
            "tns-core-modules": "3.1.0"
        }
    }
    复制代码

    2.2 页面和导航

    2.2.1 创建多页面应用

    1. 按照之前的操作创建HelloWorld项目
    2. 进入app文件夹,删除文件夹下的main-page.js, main-page.xml, main-view-model.js, 在app文件夹下创建view文件夹放页面,每个页面单独创建文件夹,文件夹应该与页面命名一致,文件目录如下:
    |- app
        |- views
            |- home
                |- home.css
                |- home.xml
                |- home.js
            |- about
                |- about.css
                |- about.xml
                |- about.js
    复制代码
    1. 修改项目启动文件app.js,将app启动页面改成home页面
    require("./bundle-config");
    var application = require("application");
    application.start({ moduleName: "views/home/home" });    //将moduleName的键值修改成home页面的路径
    复制代码
    1. 在home.xml文件中写入如下代码
    <Page>    //页面中所有其他元素的容器,类似于网页开发里面的body标签       
        <StackLayout>    //布局元素,类似于网页开发里面的div标签
            <Label text="Welcome to the Tekmo App!" />     //在屏幕上显示文本
        </StackLayout>
    </Page>
    复制代码
    1. 在about.xml文件中写入如下代码
    <Page>
        <StackLayout>
            <Label textWrap="true" text="Small company that wants to bring you the best in retro gaming!" />    //textWrap为true时会自动换行
            <Label text="Come visit us in Louisville, KY" />
        </StackLayout>
    </Page>
    复制代码

    2.2.2 多页面之间的导航

    1. 在home.xml文件中写入如下代码
    <Page>
        <StackLayout>
            <Label text="Welcome to the Tekmo App!" />
            <Button text="About" tap="onTap" />    //tap属性告诉NativeScript在单击按钮时调用onTap这个JavaScript函数
        </StackLayout>
    </Page>
    复制代码
    1. 在home.js文件中写入如下代码
    var frameModule = require("ui/frame");    //获取NativeScript框架中导航模块的引用
    function onTap() {
        frameModule.topmost().navigate("views/about/about ");    //使用frame模块导航到about页面
    }
    
    exports.onTap = onTap;    //必须导出该函数,以便NativeScript运行时可以从UI访问它
    复制代码

    2.2.3 在页面导航间应用转换动画

    如下表所示是各个平台支持的过渡动画

    接下来让我们看一下如何将这些过渡动画添加到导航跳转,在home.js中写入如下代码

    var frames = require("ui/frame");
    function onTap() {
        var navigationEntry = {
            moduleName: "views/about/about",
            transition: {
                name: "slideBottom"    //将想要应用的过渡动画写在这里
            }
        };
        frames.topmost().navigate(navigationEntry);
    }
    
    exports.onTap = onTap;
    复制代码

    2.3 理解页面布局

    参考文档进行学习

    2.4 写app的样式

    参考文档进行学习

    3. 改善应用

    3.1 数据绑定

    3.1.1 普通数据的双向绑定

    1. 在home.xml文件中写入如下代码
    <Page loaded="onLoaded">
        <StackLayout>
            <Label text="{{ Name }}" />    //在{{}}内写入需要绑定的变量
        </StackLayout>
    </Page>
    复制代码
    1. 在home.js文件中写入如下代码
    var observableModule = require("data/observable");
    var viewModule = require ("ui/core/view");
        
    exports.onLoaded = function(args){
        var page = args.object;
        var pet = new observableModule.Observable();    //pet对象是一个可观察的对象,它将绑定到页面上的所有元素
        page.bindingContext = pet;    //将pet设置为页面的绑定上下文,将其设置为用于绑定的页面级可观察对象
        pet.set("Name", "Riven");
        //也可以写成下面的形式
        //var pet = new observable.fromObject({
        //    Name: "Riven"
        //});
        //page.bindingContext = pet;
    }
    复制代码

    3.1.2 列表数据的双向绑定

    1. 在home.xml文件中写入如下代码
    <Page loaded="onLoaded">
        <StackLayout>
            <ListView items="{{ pages }}" itemTap="onItemTap">    //pages是一个可观察数组
                <ListView.itemTemplate>    //pages中的每一项会被渲染一次
                    <StackLayout>
                        <Label text="{{ title, title + ' Scrapbook Page' }}" />    //pages每一项上的title
                    </StackLayout>
                </ListView.itemTemplate>
            </ListView>
        </StackLayout>
    </Page>
    复制代码
    1. 在home.js文件中写入如下代码
    var observable = require("data/observable");
    var observableArray = require("data/observable-array");
    
    exports.onLoaded = function(args) {
        var page = args.object;
        var filledPage = new observable.Observable({
            title: "Riven's Page"
        });
        var home = new observable.Observable({
            pages: new observableArray.ObservableArray(filledPage)    //生成可观察对象数组
        }); 
        page.bindingContext = home;
    };
    复制代码

    可以将数据绑定的内容封装成单独的pageName-view-model.js文件,方便多个页面共用一个view model.

    3.2 NativeScript与设备硬件的交互

    3.2.1 文件系统模块

    var fileSystemModule = require("file-system");    //要使用文件系统模块,需要导入它
                
    exports.onLoaded = function(){
        var fileName = "myFile.json";
        var file = fileSystemModule.knownFolders.documents().getFile(fileName);    //使用documents文件夹存储应用程序需要的离线文件
        var data = {name: "Brosteins", type: "filesystemexample"};
        var jsonDataToWrite = JSON.stringify(data);
        file.writeText(jsonDataToWrite);    //将数据写入文件系统
        console.log("Wrote to the file: " + jsonDataToWrite);
        var jsonDataRead = file.readTextSync();    //使用对文件的引用来读取数据。数据可以同步读取,也可以异步读取
        console.log("Read from the file: " + jsonDataRead);
        file.remove();    //删除该文件
    };
    复制代码

    3.2.2 相机

    安装相机的插件:npm install nativescript-camera --save

    var camera = require("nativescript-camera");
    var image = require("image-source");
    
    exports.onAddImageTap = function (args) {
        var page = args.object;
        var scrapbookPage = page.bindingContext;
        camera.requestPermissions();    //要使用照相机需要获得许可
        camera
            .takePicture()    //返回一个promise
            .then(function (picture) {    //当promise解析后,调用then()函数,传递图片
                image.fromAsset(picture).then(function (imageSource) {    
                    scrapbookPage.set("image", imageSource);    //创建要绑定到视图的图像源对象
                });
            });
    }
    复制代码

    如果保存图片,需要先用 image.toBase64String("png") 将图片的二进制数据转换成base64字符串然后再保存起来。

    3.2.3 GPS定位

    安装定位的插件:tns plugin add nativescript-geolocation

    var camera = require("nativescript-camera");
    var image = require("image-source");
    var geolocation = require("nativescript-geolocation"); 
    
    exports.onAddImageTap = function (args) {
        var page = args.object;
        var scrapbookPage = page.bindingContext;
        if (!geolocation.isEnabled()) {    //在使用位置服务之前,应该检查是否启用了它,并请求启用它
            geolocation.enableLocationRequest();
        }
        camera
            .takePicture({ width: 100, height: 100, keepAspectRatio: true })
            .then(function (picture) {
                image.fromAsset(picture).then(function (imageSource) {
                    scrapbookPage.set("image", imageSource);
                });
                geolocation.getCurrentLocation().then(function (location) {    //获取位置数据会自动提示用户请求权限
                    scrapbookPage.set("lat", location.latitude);    //返回的位置的纬度值
                    scrapbookPage.set("long", location.longitude);    //返回的位置的经度值    
                });
            });
    };
    复制代码

    3.3 创建具有主题的专业UI

    参考文档进行学习

    3.4 改善用户的体验

    3.4.1 用modal构建更专业的UI

    1. 主页面的xml文件如下
    <Page backgroundColor="green" loaded="onLoaded">
        <StackLayout backgroundColor="lightGreen">
            <Button text="BirthDate" tap="onBirthDateTap"/>
        </StackLayout>
    </Page>
    复制代码
    1. 主页面的js文件如下
    var page;
    
    exports.onLoaded = function(args) {
        page = args.object;
        var scrapbookPage = page.navigationContext.model;
        page.bindingContext = scrapbookPage;
    };
    
    exports.onBirthDateTap = function(args) {
        var modalPageModule = "views/selectDate-page";
        var context = { birthDate: page.bindingContext.birthDate };
        var fullscreen = true;
        page.showModal(
            modalPageModule,
            context,
            function closeCallback(birthDate) {    //关闭modal时的回调函数,可以将modal页面的数据传递回来
                page.bindingContext.set("birthDate", birthDate);
            },
            fullscreen
        );
    };
    复制代码
    1. modal页面的xml
    <Page shownModally="onShownModally" loaded="onLoaded">
        <StackLayout>
            <DatePicker date="{{ date }}" />
            <Button class="btn btn-primary btn-rounded-sm btn-active" text="Done" tap="onDoneTap" />                          
        </StackLayout>
    </Page>
    复制代码
    1. modal页面的js
    var observableModule = require("data/observable");
                    
    var model;   
    var closeCallback;
          
    exports.onLoaded = function(args) {
        var page = args.object;
        model = new observableModule.fromObject({
            date: new Date(Date.now())
        });
        page.bindingContext = model;
    };
    
    exports.onShownModally = function(args) {
        closeCallback = args.closeCallback;   
    };                                        
    
    exports.onDoneTap = function(args) { closeCallback(model.date); };
    复制代码

    3.4.2 适配平板电脑

    可以创建 page-name.land.minWH600.xmlpage-name.land.minWH600.jspage-name.land.minWH600.css文件单独写平板端的页面。

    3.5 部署前的配置

    3.5.1 修改app图标

    1. Android

    Android的app图标放在 App_Resources目录下的drawable-*的各个文件夹中,也就是不同分辨率的设备用相应的图标

    不通过文件夹对应的设备的分辨率如下表所示:
    所以修改Android的app图标时,可以先在这个 网站生成需要的图标再放入对应文件夹。 在 App_Resources/ AndroidManifest.xml 文件中有关于app的各项设置

    <application
        android:name="com.tns.NativeScriptApplication"
        android:allowBackup="true"
        android:icon="@drawable/icon"    //在这里修改app的图标
        android:label="@string/app_name"    //在string.xml里配置app_name
        android:theme="@style/AppTheme" >    
        <activity
            android:name="com.tns.NativeScriptActivity"
            android:label="@string/title_activity_kimera"    //在string.xml里配置使用时app的名字
            android:configChanges="keyboardHidden|orientation|screenSize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.tns.ErrorReportActivity"/>
    </application>
    复制代码

    2. iOS

    App_Resources\iOS\Assets.xcassets\AppIcon.appiconset 文件下放入用入在这个网站下生成的iOS需要的适配各种设备的图标

    3.5.2 修改app名字

    1. Android

    App_Resources/Android/values/strings.xml 里面修改app的名字

    <resources>
        <string name="app_name">Pet Scrapbook</string>    //在这里改应用程序的名称
        <string name="title_activity_kimera">Pet Scrapbook</string>    //使用时app的名字
    </resources>
    复制代码

    2. iOS

    App_Resources/iOS/Info.plist里面修改app的名字

    <key>CFBundleDisplayName</key>
    <string>${PRODUCT_NAME}</string>    //在这里修改名字,可以把名字直接写在<string>标签里
    复制代码

    3.5.3 修改app版本号

    1. Android

    App_Resources/ AndroidManifest.xml里配置

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="__PACKAGE__"
        android:versionCode="1"    //用户看不到的内部版本号
        android:versionName="1.0">    //用户在谷歌商店可以看到的版本号
    复制代码

    2. iOS

    App_Resources/iOS/Info.plist里面修改app的版本号

        <key>CFBundleVersion</key>
        <string>1.0.0</string>    //版本号
    复制代码
    <key>CFBundleShortVersionString</key>
    <string>1.0.0</string>    //构建号
    复制代码

    3.5.4 修改app适配机器

    1. Android

    App_Resources/ AndroidManifest.xml里配置

    <supports-screens
        android:smallScreens="true"       //支持约2-3英寸的屏幕
        android:normalScreens="true"      //支持约2-5英寸的屏幕
        android:largeScreens="true"       //支持约4-7英寸的屏幕
        android:xlargeScreens="true"/>    //支持约7+英寸的屏幕
    复制代码

    Android屏幕大小和相应的屏幕分辨率DPIs如下表所示

    2. iOS

    App_Resources/iOS/Info.plist里适配各种设备

    <key>UISupportedInterfaceOrientations</key>    //适配iPhones
        <array>
            <string>UIInterfaceOrientationPortrait</string>
            <string>UIInterfaceOrientationLandscapeLeft</string>
            <string>UIInterfaceOrientationLandscapeRight</string>
        </array>
    <key>UISupportedInterfaceOrientations~ipad</key>    //适配iPads
        <array>
            <string>UIInterfaceOrientationPortrait</string>
            <string>UIInterfaceOrientationPortraitUpsideDown</string>
            <string>UIInterfaceOrientationLandscapeLeft</string>
            <string>UIInterfaceOrientationLandscapeRight</string>
        </array>
    复制代码

    3.5.5 修改app启动页面

    1. Android

    drawable-nodpi目录下的splash_screen.xml配置了app的启动页面

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:gravity="fill">
        <item>
            <bitmap android:gravity="fill" android:src="@drawable/background" />    //启动屏幕的背景图
        </item>
        <item>
            <bitmap android:gravity="center" android:src="@drawable/logo" />    //启动屏幕中心的logo图片
        </item>
    </layer-list>
    复制代码

    启动屏幕的背景图和中心的logo图配置的方法和app的图标是相同的

    2. iOS

    • App_Resources\iOS\Assets.xcassets\LaunchScreen.AspectFill.imageset里放启动屏幕的背景图
    • App_Resources\iOS\Assets.xcassets\LaunchScreen.Center.imageset里放启动屏幕中心的logo图片 可以在这个网站生成适配各种设备的图片

    4. 结语

    转载于:https://juejin.im/post/5cd2a338518825358c25e854

    展开全文
  • Elasticsearch script使用详解

    万次阅读 2020-10-13 16:40:12
    文章目录概述script 格式使用script_score处理_score使用script_fields处理返回的字段值使用script作为过滤条件使用script进行聚合统计 概述 script作为elasticsearch的拓展功能,通过定制对应的表达式,可以帮助...

    概述

    script作为elasticsearch的拓展功能,通过定制对应的表达式,可以帮助我们实现一些自定义的需求:

    • 定义经过处理的字段作为返回值
    • 定义查询得分的计算公式
    • 定义特殊过滤条件,例如两个字段比较大小
    • 定义特殊过滤条件

    script 格式

    "script": {
       
        "lang":   "...",
    展开全文
  • 在更新完pip的版本之后 使用pip...WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip. Please see https://github.com/pypa/pip/issues/5599 for advice on f...

    在更新完pip的版本之后 使用pip继续安装django时报了这个错

    WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
    Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.
    To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.
    

    大概能猜出可能是python的安装包和pip的版本对不上?但是又不想去重装安装包 到时候又会出现一些莫名其妙的bug
    因此搜索了一下
    最后用python -m pip install Django
    命令解决问题

    参考:https://www.dreamincode.net/forums/topic/418289-pip-broken/?cf_chl_captcha_tk=e1d43d08ac9131dcd5c8e4d0144d02b8e921111d-1581578727-0-AY4v0hLRx7TpmcYaZPNiZB-evodxHYaTswGYDvdLLWVRt20axGxZsmftzv8FbH67aaCRC7i4n2JRuyBeKm0yq4sSnrLit3pTiORMX6ckULjzL4BfGuUXZDFN2DFF24-yaAOPWLtzqqsecY7URkC4cmp30icztCoW7_n_2vkeyjO7MdweaC63NS2P4osFmqEABxUdOxFp7-ZcK19G8XWKQAdDLxbD8hB9-WLqBZwWnqrOxSdC1njc6Iwd-CaGCgz_X0x12DO65NSt_gN3wD0e_zNsJyQpiNiEjgIcQd02RZb22ZjZ9I-rjrQMc8xRjUZvqsffmy3S8fIZOWd4R9eKoiAzo5NJYGo8wg8xDE7FHCRp

    展开全文
  • ISScript.msi安装补丁

    热门讨论 2012-12-23 10:38:40
    在开始菜单运行中输入 services.msc 回车,选择自动执行Install Drive Table Manager服务
  • AppleScript 快速入门

    万次阅读 2018-08-12 00:27:10
    AppleScript 快速入门 AppleScript 快速入门 一、让其他程序执行任务 二、数据类型 三、条件语句 四、循环 五、函数 六、用户交互对话框 七、使用词典 八、操作其他程序的界面 九、运行参数 AppleScript ...

    AppleScript 快速入门

    AppleScript 顾名思义是苹果开发的一套脚本语言,利用 AppleScript 在 macOS 系统上可以对其他程序进行操作,点击按钮、发送消息、模拟自动化执行功能,比如可以打开浏览器,清空回收站等等一些操作,是一个非常有意思的脚本。说好了要快速入门,下面我们开始快速学习了解它吧。

    一、让其他程序执行任务

    在 macOS 上有一个应用叫脚本编辑器,通过 Launchpad 可以搜索到,打开脚本编辑器之后,可以看到支持编写和解析 AppleScript 和 JavaScript 两种脚本,如下图所示:

    AppleScript 的语法和平时的英语语法很类似,你想让哪个程序执行操作,就 tell 它,比如你想让 Finder 清空回收站那就这样写:

    tell application "Finder"
        empty the trash
    end tell

    在脚本编辑器上点击运行按钮就可以看到回收站的内容被清空了,或者按快捷键 Command + R 也能运行,运行之前记得回收站得有东西,不然可能会执行失败。

    如果你想让系统说话,可以这样写:

    tell application "Finder"
        say "My name is exchen"
    end tell

    哈哈,记得把电脑的声音打开,是不是听到说话了?不仅支持英文和中文,其他国家语言,像德语、荷兰语笔者试过,同样也可以。

    如果你想让浏览器打开 URL,可以这样写:

    set myBlog to "http://www.exchen.net"
    
    # 告诉 Chrmoe 浏览器打开 URL
    tell application "Google Chrome"
        # 新建一个 chrome 窗口
        set window1 to make new window
        tell window1
            set currTab to active tab of window1
            set URL of currTab to myBlog
        end tell
    end tell

    看看 Chrmoe 浏览器是不是打开了你指定的 URL 了?有意思吧?

    上面的测试代码都是在脚本编辑器里运行的,如何脱离脚本编辑器,直接在系统上运行呢?我们可以保存或导出脚本,点击文件菜 -> 存储,可以看到支持的格式有四种,如图所示:

    保存为脚本类型,然后通过 osascript 来执行脚本,如下:

    /usr/bin/osascript test1.scpt

    如果保存为应用程序类型,就是一个 .app 的包,直接双击打开就能运行。

    二、数据类型

    AppleScript 的数据类型比较简单,一般常用的有 number、string、list、record,也就是数字类型、字符串类型、列表类型、字典类型。

    数字类型的赋值和使用如下:

    set num1 to 10 # 给 num1 赋值
    set num2 to 20 # 给 num2 赋值
    set num3 to num1 + num2 # num1 + num2 赋值给 num3
    set num4 to num3 * 2 # num3 * 2 赋值给 num4

    字符串类型的赋值和使用如下:

    set str1 to "exchen.net"
    set str2 to "hehe"
    set str3 to str1 & str2
    

    字符串与数字的转换方法如下:

    set str3Len to the length of str3
    set numToStr to num1 as string
    set strToNum to "123" as number

    列表类型其实就是相当于数组,定义和操作列表类型的方法如下:

    set myLists to {1, 2, "str", 4, 5} # 定义列表数据
    set item 3 of myLists to "exchen" #操作第三列的数据
    get myLists  # 获取列表数据

    字典类型的定义和操作方法如下:

    set myRecord to {name:"exchen", blog:"http://www.exchen.net", body:"hehe"} # 定义 Record 数据
    set value to the body of myRecord # 从 Record 中获取 body 数据给 value
    get value

    三、条件语句

    既然是脚本语言,当然不能少了 if 和 else 语句,使用方法如下:

    set num to 123
    if num = 123 then
        display dialog "等于 123"
    
    else if strToNum > 456 then
        display dialog "大于 456"
    
    else
        display dialog "不等于 123 也不大于 456"
    end if

    通过 contains 方法来进行字符串的比较判断:

    set domainName to "www.exchen.net"
    if domainName contains "exchen" then
        display dialog "包含 exchen"
    else
        display dialog "不包含 exchen"
    end if

    四、循环

    循环的写法有好几种,不过都是使用 repeat … end repeat,比如循环 100 次可以这样写:

    set num to 10
    repeat 100 times
        set num to num + 1
    end repeat
    
    get num

    类似于 for 循环,就这样写:

    set num to 5
    repeat with counter from 0 to num by 1
        display dialog counter
    end repeat

    类似于 while 循环,可以这样写:

    set num to 0
    repeat until num10
        display dialog num
        set num to num + 3
    end repeat

    五、函数

    如果某些功能有重用性,应该要写成函数,AppleScript 也支持定义函数,定义和使用方法如下:

    on testFun()
        set num to 1
    end testFun
    
    testFun()

    函数当然会有返回值,通过 return 返回值:

    on testFun()
        set num to 1
        return num
    end testFun
    
    set ret to testFun()
    get ret
    

    另外函数可能还会带参数,带参数的方法使用如下:

    on testFun(str)
        display dialog str
    
    end testFun
    
    testFun("exchen")

    函数有可能会带多个参数,使用方法如下:

    on testFun(str1, str2)
        display dialog str1
        display dialog str2
    
    end testFun
    
    testFun("exchen", "hehe")

    六、用户交互对话框

    在前面我们使用过 display dialog 弹出对话框,如果要指定标题通过 with title 关键字,代码如下:

    display dialog "这是内容" with title "这是标题"

    指定按钮的内容,可以通过 buttons {“No”, “Yes”},按钮个数最多三个,代码如下:

    display dialog "这是内容" with title "这是标题" buttons {"No", "Yes"}

    也可以通过 default button 设置默认选择的按钮,代码如下:

    display dialog "这是内容" with title "这是标题" buttons {"No", "Yes"} default button "Yes"

    还可以指定对话框的图标,icon 图标可以指定 note/stop/caution 类型,或者指向文件路径,代码如下:

    display dialog "这是内容" with title "这是标题" buttons {"No", "Yes"} default button "Yes" with icon note

    对话框一般是用于和用户进行交互,通过 button returned 可以获取用户点击了哪个按钮,然后进行相应用操作,代码如下:

    display dialog "这是内容" with title "这是标题" buttons {"No", "Yes"} default button "Yes"
    if button returned of result = "Yes" then
    
    else if button returned of result = "No" then
    
    end if

    对话框中也可以带输入框,让用户进行输入内容,代码如下:

    display dialog "请输入内容:" default answer ""

    带输入框的对话框的效果如下图:

    输入内容之后,通过 text returned 来获取输入框的内容:

    display dialog "请输入内容:" default answer ""
    if text returned of result = "exchen" then
        get "exchen.net"
    end if

    七、使用词典

    在第一节我们知道了如何在其他程序中执行任务,比如让浏览器打开 URL、清空回收站,如果还想执行其他额外更多的功能怎么办?去哪儿查相应的方法名称?

    可以通过词典来找相应的方法名称,将应用直接拖到 Dock 上的脚本编辑器图标,然后就会显示扩展的词典,在这里可以查看该应用支持的相应方法名称说明,比如 Chrome 的词典如下图所示:

    有些应用没有功能扩展的词典,就会提示打开词典失败,如下图所示:

    八、操作其他程序的界面

    本小节我们来试一下操作其他程序来实现简单的自动化,打开计算器,使用 entire contents 显示出 UI 信息,代码如下:

    tell application "System Events"
        tell process "Calculator"
            entire contents
        end tell
    end tell

    返回 UI 信息如下:

    {window 1 of application process "Calculator" of application "System Events", group 1 of window 1 of application process "Calculator" of application "System Events", static text "0" of group 1 of window 1 of application process "Calculator" of application "System Events", group 2 of window 1 of application process "Calculator" of application "System Events", button 1 of group 2 of window 1 of application process "Calculator" of application "System Events", button 2 of group 2 of window 1 of application process "Calculator" of application "System Events", button 3 of group 2 of window 1 of application process "Calculator" of application "System Events", button 4 of group 2 of window 1 of application process "Calculator" of application "System Events", button 5 of group 2 of window 1 of application process "Calculator" of application "System Events", button 6 of group 2 of window 1 of application process "Calculator" of application "System Events", button 7 of group 2 of window 1 of application process "Calculator" of application "System Events", button 8 of group 2 of window 1 of application process "Calculator" of application "System Events", button 9 of group 2 of window 1 of application process "Calculator" of application "System Events", button 10 of group 2 of window 1 of application process "Calculator" of application "System Events", button 11 of group 2 of window 1 of application process "Calculator" of application "System Events", button 12 of group 2 of window 1 of application process "Calculator" of application "System Events", ......
    
    column 2 of table 1 of menu item 1 of menu "帮助" of menu bar item "帮助" of menu bar 1 of application process "Calculator" of application "System Events", menu item "计算器帮助" of menu "帮助" of menu bar item "帮助" of menu bar 1 of application process "Calculator" of application "System Events"}

    比如我们关心的是按钮 9,信息比较多,一时看不出我们所关心的按钮,可以通过 Xcode 自带的工具 Accessibility Inspector 查看 UI 信息,打开 Xcode 菜单,在 Open Developer Tool 里可以找到它,打开之后点击捕获按钮,找到我们关心的按钮,效果如下图所示:

    在 Accessibility Inspector 界面往下拉,可以看到按钮 9 是在第二组的第四个,所图所示:

    从返回的 UI 信息里可以找到按钮信息:

    button 4 of group 2 of window 1 of application process "Calculator"

    编写代码实现点击按钮:

    tell application "System Events"
        tell process "Calculator"
            entire contents
            click button 7 of group 2 of window 1
        end tell
    end tell

    如果想点击菜单,在 UI 返回信息里你关心的菜单,编写代码如下:

    tell application "System Events"
        tell process "Calculator"
            click menu item "关于计算器" of menu "计算器" of menu bar item "计算器" of menu bar 1
        end tell
    end tell

    执行之后,就相当于点击了 “关于计算器” 菜单,如下图所示:

    九、运行参数

    在第一节,我们知道通过 /usr/bin/osascript 能够执行脚本,如果脚本在启动的时候需要参数怎么办?通过 on run 定义好参数,代码如下:

    on run {parameter1, parameter2}
        display dialog parameter1
    end run

    然后在命令行执行的时候,后面跟参数执行就行了,命令如下:

    /usr/bin/osascript test1.scpt "exchen.net" "parameter2"

    原文地址:http://www.exchen.net/applescript-%e5%bf%ab%e9%80%9f%e5%85%a5%e9%97%a8.html

    展开全文
  • script命令简介 1 什么script命令 2 script命令操作 21 file选项 22 options选项 23 退出scriptScript命令结合实际使用场景 1 先在终端执行script命令记录scp命令过程 2 在脚本文件中添加script命令来记录scp的...
  • script标签加载顺序(defer & async)

    千次阅读 2018-10-11 14:02:26
    script 拥有的属性 async:可选,表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效。 charset:可选。表示通过 src 属性指定的代码的字符集。由于...
  • TorchScript官网教程

    千次阅读 2019-02-22 13:40:01
    TorchScript是一种利用PyTorch代码创建可序列化和可优化模型的方法。 用TorchScript编写的任何代码都可以从Python进程中保存,然后可以在没有Python相关依赖的工程中被加载。 我们提供的工具可以将模型从纯Python...
  • MyBatis源码分析之Script用法详解

    千次阅读 2019-01-22 08:14:49
    MyBatis源码分析之在上一篇文章中讲到MyBatis的#{paras}和${paras}用法,在里面提到在解析sql组装成SqlSource对象时,会判断当前sql是否是动态类型,然后里面有一个对sql中是否...script&amp;amp;gt;&amp;quo
  • sikuli-script.jar

    热门讨论 2012-09-09 09:38:48
    在java中使用sikuli所需要的jar包。 对应sikuli的1.0最新版本。
  • java script(一)

    千次阅读 多人点赞 2020-09-04 15:55:30
    java script JavaScript是什么,能干什么? 一个网页的结构,是通过HTML决定的 脑袋,手脚,身体 CSS决定了这个网页的样式 是高是矮,是胖还是瘦,是黑还是白 这个网页的行为是通过JavaScript决定的 走路,跑步,眨...
  • script setup> import { ref } from 'vue' // 像在平常的setup中code // 但是不需要返回任何变量 const count = ref(0)//在此处定义的count可以直接在模板html中引用 const inc = () => {//函数也可以...
  • Unity插件TouchScript初识

    千次阅读 2019-08-02 21:19:42
    using TouchScript.Gestures.TransformGestures; namespace TouchScript.Examples.Colors { /// public class Circle : MonoBehaviour { private bool isDestroyed = false; public Color Kill() { is...
  • 前两天开始studio 在 make project 的时候总是会报 apply script build.gradle time out 这个问题,或是有第三方依赖下载失败,后来没办法只能自己下载三方的jar包放到对应位置才解决了这个问题。 以 kotlin-...
  • Google Apps Script 的使用

    千次阅读 2019-11-17 16:01:07
    Google Apps Script 是为谷歌工作表Sheets、文档, Docs、幻灯片Slides或表单Forms创建附加组件,自动化您的工作流,与外部api集成,等等。 他的使用也很简单,除了简单易用的api外,还有强大的管理功能 打开Apps ...
  • AppleScript入门

    千次阅读 2016-07-09 10:43:54
    AppleScript 是 Mac OS X内置的一种功能强大的脚本语言,使用 AppleScript 的目的是把一些重复繁琐并且耗费时间的任务自动化。比如我是一个自由职业者,我十分的讨厌每个星期为不同的客户去创建帐单,为了解决这个...
  • FiddlerScript编程

    千次阅读 2019-01-25 14:51:36
    FiddlerScript 是Fiddler 的一项非常强大的功能,它允许你增强Fiddler UI,添加新的特性,修改请求与响应内容等等。。。 1.编写FiddlerScript FiddlerScript 基于JScript.NET 语言。在Fiddler 中点击菜单“Rules ...
  • HTML中script标签

    千次阅读 2019-03-05 17:07:36
    一、script标签中的属性 async:在script标签中添加此属性,浏览器会开启异步下载脚本(执行到当前标签后立即下载),当下载完成后立即执行,但并不会按着script在页面中的顺序来执行,而是谁先加载完谁执行。...
  • Script error之全面解析

    千次阅读 2018-11-08 11:25:08
    一些用户向我们反馈,Fundebug的JavaScript监控插件抓到了很多Script error.,然后行号和列号都是0…这就很尴尬了。 今天,我们来详细地解析一下Script error.,后续我们还会深度测试并且提供解决方法。 同源策略 ...
  • SAP SCRIPTFORM 操作手册

    千次阅读 2018-07-05 17:22:31
    SAPscript 用途:SAP SCRIPT常用来打印需要输出到纸张的报表、凭证。 SAP SCRIPT 使用页、窗口、段落格式和文本来控制输出。文本存在于窗口之中,每个文本有段落格式来指定字体,间隔等信息。窗口存在于页上,在...
  • 动态创建script标签动态创建script标签的优点以及注意事项在动态引入js文件后,可直接调用里面的方法执行执行后出现的问题解决方式:方法一:非ie方法 script.onload = function(){},触发 script.onload事件就代表...
  • Unity 触摸插件 TouchScript遇到的坑

    千次阅读 热门讨论 2019-11-13 10:00:46
    说在前面,我现在的项目使用TouchScript 是因为突然改需求要用触摸屏。原本TouchScript的功能根本不能满足项目用。 网上找到大部分教学都没有说怎么用Script写其他功能,所以只能一步一脚印研究了。 首先,没有看...
  • elasticsearch script实战

    万次阅读 2019-01-25 16:33:09
    浅谈elasticsearch-script脚本使用机制 通过阅读官方文档我们可以了解到es所使用的脚本语言是painless这是一门安全-高效的脚本语言,基于jvm的,总而言之对于java语言的小伙伴来说是非常友好的. ...
  • 用pystaller 生成的exe文件,双击运行时出现failed to execute script错误, 求大神帮忙,到底是什么原因。网上没查到,基本也有什么路径的问题。很简单的一段代码 代码如下 # -*- coding: utf-8 -*- #根据...
  • 概述 Selenium虽然内置了很多与浏览器交互的方法,但是有一些方面还是不能完全覆盖,因此执行JavaScript是非常有必要的,这也是模拟...execute_script方法 Selenium中执行JavaScript主要依靠WebDriver的execute_scr
  •   使用conda和pip安装(python虚拟环境也是一样),更新,列出包时,偶尔会报错,说Cannot open ** Scripts\pip-script.py,我一看对应路径下确实没有pip-script.py这个文件,但不是每次都会报错,为了解决这个问题...
  • pytorch模型转torchscript

    千次阅读 2020-10-11 11:30:45
    共有两种方法将pytorch模型转成torch script ,一种是trace,另一种是script。一版在模型内部没有控制流存在的话(if,for循环),直接用trace方法就可以了。如果模型内部存在控制流,那就需要用到script方法了。 ...
  • script使用integrity属性进行安全验证

    千次阅读 2021-11-02 09:16:46
    script标签引入文件 在html中,script标签可以通过src属性引入一个js文件,引入的js文件可以是本地的,也可以是远程的。 1. 引入本地文件 开发环境一般多引入本地js文件。 <script src="./js/index.js"></...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,353,849
精华内容 941,539
热门标签