第51篇 Chrome扩展开发(二)及php

    xiaoxiao2023-03-24  6

    第51篇 Chrome扩展开发(二) Tuesday 一、 PHP知识 1.1 php自由转换和强制转换 a. 使用intval,floatval, b. 使用settype(),它会改变当前数据的数据类型 c. $b=(array)$a;把$a转换成数组赋给$b,但$a本身的数据类型没发生变化。 d. 但有些数据类型之间不可以进行转换,比如:一个对象型数据,不能转换成整型字符串类型数据。标量数据不能转换成非标量数据。 1.2 表单提交 代码如下: 运行结果: 二、Chrome Extension Overview(接上篇) https://developer.chrome.com/extensions/overview 2.7 内容脚本(Content scripts) 如果你的扩展需要和网页交互,那它需要一个内容脚本。一个内容脚本是一些加载在浏览器中运行在网页上下文的JS。可以认为内容脚本是加载网页的一部分,但不作为扩展的部分进行打包,这个扩展指的是它的父扩展。 内容脚本能读取浏览器访问网页的细节,它们能对网页做些改变。在下图中,内容脚本能读取和改变展示网页的DOM。但它不能改变父扩展背景页的DOM。 内容脚本没有完全切断与父扩展的联系。一个内容脚本能和它的父扩展交换信息,在下图中用箭头表示。例如:一个内容脚本当它以浏览器页面发现RSS时,它会发送一条消息。或者一个背景页发送一个消息请求内容脚本为了改变浏览器页面的展示。 关于内容脚本的更多信息,请访问:https://developer.chrome.com/extensions/content_scripts 2.8 chrome.* APIs 除了访问所有web页面和应用程序可以使用的api,扩展还可以使用Chrome-only APIs(通常称为chrome.* api),允许与浏览器的紧密集成。例如,任何扩展或应用程序都能使用window.open()方法打开一个URL。但如果你想明确哪个URL应该被展示出来,你的扩展可以使用Chrome-only tabs.create。 2.8.1 异步与同步方法 大部分方法在chrome.* APIs中是异步的:他们能立即返回结果,不用等着操作完成。如果你需要知道操作的结果,你可以在方法中加入返回函数。那样返回结果会随后执行(也可能晚些时候执行)。为异步方法签名的例子如下: 也有一些chrome.*方法是同步的。同步的方法没有返回值,因为它们直到完成所有的工作才返回。通常,同步方法有一个返回类型,下面是runtime.getURL(https://developer.chrome.com/extensions/runtime#method-getURL)方法: 这个方法没有返回值和字符串返回类型,因为它同步地返回URL,没有其它的展示异步的工作。 2.8.2 有返回值的例子 如果说你想浏览用户目前选择指向一个新URL的Tab. 要做到这,你需要获得当前tab的ID(可以使用tabs.qery获得),之后,可以使tab指向的URL(可以使用tabs.update实现).如果query()是同步的,你可以这样写代码: 这个方法失败,因为query()是异步的。它返回,不会等待工作完成,它甚至没有一个返回值(尽管一些异步方法拥有)。你能在签名的返回参数中告诉query()是异步的。 为了解决前面的代码,你必须使用一个返回参数。下面的代码展示怎么定义一个返回函数从query(作为tab的参数名)和call update()中获取结果。 在这个例子中,按照以下顺序执行:1,4,2(第1行,第4行,第2行),这个返回函数明确了query(),只有在选择的tab是有效的时候才可用。尽管update()是异步的,这个例子不使用返回参数,因为我们不需要对update的返回结果做任何事。 2.8.3 More details 更多信息,请看chrome.* API docs(https://developer.chrome.com/extensions/api_index)和视频: 2.9 网页间的交流 在一个扩展中的HTML网页通常需要交流。因为所有的扩展页面中执行同样的过程在同一线程, 页面间可以直接进行函数调用。 在扩展中为了找到页面,可以使用chrome.extension的方法,像getViews() 和 getBackgroundPage()。一旦一个网页在扩展中引用了其它的网页,首页能唤醒其它页面的函数,并且能操控它们的DOMs. 2.10 保存数据和隐身模式 扩展能用storage API保存数据,HTML5 web storage API(像localStorage)或通过服务器请求保存数据结果。无论你何时想保存数据,首先考虑是否它来自己一个隐身模式的窗口。默认情况下,扩展不会运行在隐身的窗口中。当浏览器处于隐身模式中,你需要考虑用户想从你的扩展中得到什么。 隐身模式下,窗口浏览不会留下任何痕迹。当在隐身模式处理数据时,你最好遵循这个约束。例如,如果你的扩展平常会保存浏览器记录到云上,在隐身模式下不要这样做。另一方面,你也能保存你的扩展设置在任何窗口,不管隐身与否。 经验法则:如果一块数据展示在一个用户在网络上的地方和做的什么,在隐身模式下不要存储这些数据。 To detect whether a window is in incognito mode, check the incognito property of the relevant tabs.Tab or windows.Window object. For example:为了检测一个窗口是否处于隐身模式,可以检查相关的tabs.Tab或windows.Window对象的隐身属性,例子如下: 2.11 现在要做什么? 现在已经给了大概介绍了扩展,你应该读或写你自己的扩展。下面有一些建议为接下来你要做什么: 1)模板----写始写扩展(https://developer.chrome.com/extensions/getstarted) 2)模板---调试(https://developer.chrome.com/extensions/tut_debugging) 3)开发者向导----(https://developer.chrome.com/extensions/devguide) 4)例子------(https://developer.chrome.com/extensions/samples) 5)相关视频(https://www.youtube.com/view_play_list?p=CA101D6A85FE9D4B)像扩展信息传递(https://www.youtube.com/watch?v=B4M_a7xejYI&feature=PlayList&p=CA101D6A85FE9D4B&index=6) 三、自己扩展开发----检测与接收蓝牙数据 3.1 关于蓝牙--->https://developer.chrome.com/apps/app_bluetooth 这篇文章描述怎么使用Bluetooth,Bluetooth Socket及Bluetooth Low Energy APIs,这些接口用于与蓝牙及蓝牙低能量设备进行通讯。关于蓝牙的背景信息,可以访问:https://www.bluetooth.com/。 3.2 清单要求(Manifest requirements) 对于使用蓝牙的Chrome Apps,要向清单和声明中添加蓝牙入口,如果合适,你希望实现的文件,协议,服务的UUIDs以及你希望实现这些用socket 和/或 Low Energy APIs。例如socket实现如下: 一个低能量的蓝牙设备实现如下: 访问适配器状态,发现附近设备和获得关于设备的基本信息,仅仅入口本身被请求: 3.3适配器信息 3.3.1获取适配器状态 为了获取蓝牙适配器状态,使用bluetooth.getAdapterState方法: 3.3.2适配器通知 无论何时适配器状态发生改变时,bluetooth.onAdapterStateChanged 事件都会发送信息。这能被使用确定适配器广播是打开的还是关闭的。 3.4 设备信息 3.4.1列出已知设备 为了获得一个蓝牙适配器设备清单,使用bluetooth.getDevices 方法: 上面方法所有的设备都被返回,包括配对的设备和最近发现的设备。但它不会去发现新设备(要发现新设备,可以看:https://developer.chrome.com/apps/app_bluetooth#discovery)。 3.4.2 接收设备通知 除了反复调用bluetooth.getDevices,你可以使用bluetooth.onDeviceAdded, bluetooth.onDeviceChanged 以及 bluetooth.onDeviceRemoved三个事件接收信息。 无论何时新设备出现时,这个bluetooth.onDeviceAdded事件被触发,比如一个适配器连接另一个适配器时。 2016年9月27日星期二
    转载请注明原文地址: https://ju.6miu.com/read-1202484.html
    最新回复(0)