❶ 谷歌浏览器怎么不能设置安装路径
一、由于Chrome谷歌浏览器在安装时不可以选择安装路径,所以需默认安装完成之后再进行转移。
1、下载谷歌浏览器到本地磁盘,然后点击安装;
2、默认安装好后,在桌面会自动创建谷歌浏览器快捷方式,鼠标移到谷歌甫骸颠缴郯剂奠烯订楼浏览器快捷方式上,点击鼠标右键,点击【属性】选项进入;
3、找到起始位置后,可以看到默认安装在c盘,复制起始位置,然后打开要安装浏览器目录磁盘(D盘为例);
4、把C盘下Chrome谷歌浏览器安装目录下所有文件剪切到要安装的盘里(D盘为例);
5、现在再点击桌面的谷歌浏览器快捷方式,然后点击删除快捷方式;
6、进入D盘Chrome谷歌浏览器安装目录下,将鼠标移到谷歌浏览器图标上,点击右键创建新的谷歌浏览器快捷方式至桌面即可;
❷ 如何设置chrome可以调用sqlite
通过HTML5的方式就可以,下面是示例代码:
用HTML5
API来操作本地SQLite数据库的例子:
HTML代码:
1. <!DOCTYPE
html>
2. <head>
3. <meta
charset="UTF-8">
4. <title>使用HTML5本地数据库DEMO</title>
5. <script type="text/javascript"
src="js/operateDB.js"></</script>
6. </head>
7.
8. <body
onload="init();">
9. <h1>使用HTML5本地数据库DEMO</h1>
10. <table>
11.
<tr><td>姓名:</td><td><input
type="text"
id="name"></td></tr>
12.
<tr><td>资料:</td><td><input
type="text"
id="info"></td></tr>
13.
<tr>
14.
<td></td>
15.
<td><input
type="button" value="保存"
onclick="saveData();"></td>
16.
</tr>
17. </table>
18. <hr>
19. <table id="datatable"
border="1"></table>
20. <p
id="msg"></p>
21. </body>
javascript 封装了许多方法,比如保存数据到数据库,更新,同步下方的列表等。
1.
5.
6. //这个是下方的表格元素
7. var datatable = null;
8.
9. //创建一个数据库对象
10. //4个参数分别是 数据库名,版本号,数据库的描述,数据库大小
11. var db = openDatabase('MyData','','My
Database',102400);
12.
13. //init()方法,用于页面下方表格元素的引用,并且显示所有的数据库记录
14. function init(){
15.
//取得下方的表格元素,并且赋值给全局变量
16.
datatable = document.getElementByIdx_x("datatable");
17.
18.
//显示所有已经在数据库中存储的记录
19.
showAllData();
20. }
21.
22.
//removeAllData()方法,用于移除所有的表格中的当前显示数据(它并不去除数据库记录)
23. function removeAllData(){
24.
//首先,它将<table>下面的所有子元素全部清除
25.
//所以,这里它对于datatable组件进行遍历
26.
for(var
i=datatable.childNodes.length-1;i>=0;i--){
27.
datatable.removeChild(datatable.childNodes(i));
28.
}
29.
30.
//全部去除之后,现在需要显示这个表头部分<tr>里面有多个<th>
31.
//创建表头行到文档树中
32.
var tr= document_createElement_x('tr');
33.
//表头行的第一个表头
34.
var th1=document_createElement_x('th');
35.
//表头行的第二个表头
36.
var th2=document_createElement_x('th');
37.
//表头行的第三个表头
38.
var th3=document_createElement_x('th');
39.
//设置这3个表头的文本
40.
th1.innerHTML="姓名";
41.
th2.innerHTML="资料";
42.
th3.innerHTML="时间";
43.
//将这些表头依次放在表头行中
44.
tr.a(th1);
45.
tr.a(th2);
46.
tr.a(th3);
47.
//将这个新创建的表头行挂到表格中
48.
datatable.a(tr);
49. }
50.
51.
//构建指定数据库行的数据对应的HTML文本。传入参数:数据库结果集中的某一行记录
52. function showData(row){
53.
//构建一个表行用于取得当前所要的信息
54.
var tr= document_createElement_x('tr');
55.
//创建第一列,这一列是姓名
56.
var td1=document_createElement_x('td');
57.
//填充第一列的信息为该行的name
58.
td1.innerHTML=row.name;
59.
//创建第二列,这一列是留言
60.
var td2=document_createElement_x('td');
61.
//填充第一列的信息为该行的message
62.
td2.innerHTML=row.info;
63.
//创建第三列,这一列是日期
64.
var td3=document_createElement_x('td');
65.
//创建一个日期对象
66.
var t = new Date();
67.
t.setTime(row.time);
68.
//将日期的标准形式和国际化日期形式分别设置给当前列
69.
td3.innerHTML=t.toLocaleString()+" "+t.toLocaleTimeString();
70.
//吧这三列挂到当前行中
71.
tr.a(td1);
72.
tr.a(td2);
73.
tr.a(td3);
74.
//让这个表格在后面加上这一行
75.
datatable.a(tr);
76. }
77.
78. //这个函数用于显示所有的行到表格中,这些行是从数据库中拿出来的
79. function showAllData(){
80.
//开启SQLite数据库事务,它用一个回调函数作为参数表明要执行的语句
81.
db.transaction(function(tx){
82.
//首先它创建一个数据库表,里面有3个字段
83.
tx.executeSql('CREATE TABLE IF NOT EXISTS InfoData(name TEXT,info
TEXT,time INTEGER)',[]);
84.
//创建一个查询语句用来查询数据库表的所有记录(这个由于是所有查询,所以不需要预编译语句和参数 (第二个参数))
85.
//然后定义了一个回调函数,表明对于结果集的处理
86.
tx.executeSql('SELECT * FROM InfoData',[],function(tx,rs){
87.
88.
//对于结果集,首先,在获取它之前移除页面上的<table>的所有数据
89.
removeAllData();
90.
//遍历结果集,对于每一行,依次调用showData来在table上创建对于的html文本
91.
for(var i=0;i<rs.rows.length;i++){
92.
//对于item(i),也就是某一行记录,我们显示其内容到页面的表格中(构建对应的HTML片断)
93.
showData(rs.rows.item(i));
94.
}
95.
});
96.
}
97.
98.
);
99. }
100.
101.
//这个函数用于添加一条记录到数据库中,这些信息有些是从页面获得的,有些是系统生成的。
102. function addData(name,info,time){
103.
//开启一个数据库事务
104.
//回调函数是一个有参数的插入语句,可以看到我们插入到表InfoData中,插入的内容也就是参数传递进来的内容
105.
db.transaction(function(tx){
106.
107.
//插入的语句是个模板语句
108.
//插入成功的回调就是在控制台上输入一行日志
109.
tx.executeSql('INSERT INTO InfoData VALUES(?,?,?)' ,
[name,info,time],function(tx,rs){
110.
console.log("成功保存数据!");
111.
},
112.
//插入失败的回调就是在控制台上输入一行错误日志
113.
function(tx,error){
114.
console.log(error.source+"::"+error.message);
115.
});
116.
}
117.
118.
);
119. }
120.
121. //保存用户的当前输入,这个是作为点击页面上”保存“按钮的事件处理函数
122. function saveData(){
123.
//从HTML页面中取得2个输入框的文本
124.
var name=document.getElementByIdx_x('name').value;
125.
var info=document.getElementByIdx_x('info').value;
126.
//得到当前的系统时间 www.2cto.com
127.
var time= new Date().getTime();
128.
//将用户名,用户信息,当前时间存到数据库中
129.
addData(name,info,time);
130.
//更新下方<p id="msg">的表格显示
131.
showAllData();
132. }
❸ 新版Chrome没有Flash怎么办
方法1、在你的chrome54地址栏中输入 chrome://components/ ,在里面找到flash player 一项,点击更新,这样你的chrome会自动下载dll文件。
但是!此法需要科学上网或者修改HOSTS!而且因为chrome的权限问题,使用switchy omega 此类插件没法达成效果,必须开全局科学上网才可以。
方法2、我们直接手动下载好ppapi 的最新flash,提取文件后放入对应的位置。
从以下官方链接下载最新版的ppapi的flash完整包,各种方法获取比如sandboxie获取到dll文件并且提取出来,重命名好后粘贴到你的用户文件夹对应位置。
注意:dll文件的路径是在你的chrome浏览器 User Data 文件夹下,可以用搜索的方式找到。(忽略截图中路径的前半部分,只需要找到你的 User Data 文件夹即可)
方法3、你直接安装 ppapi 的flash player,但是对于一些绿色版便携版,还是得自己动下手。
通过上面的方法就可以成功的给chrome安装Falsh插件了!
❹ 如何开发Chrome扩展程序
开始
为了着手创建你的扩展程序,你只需要为你的扩展创建一个文件夹。程序所必须的文件只有manifest.json.,不过也推荐准备一些图片用作图标,和至少一个JavaScript以提供功能。一般来说还会包含HTML文档、样式表、图片等等其他的资源。
Manifest文件
每个扩展都必须在其根目录下包含一个manifest.json文件。
这个文件里面声明了扩展的名称、版本、权限、设置选项和其他的一些和扩展相关的元数据。Manifest v1早在Chrome 18便已被弃用,而且会根据这个时间表逐渐淘汰使用Manifest v1的扩展。如果你在参考一些旧扩展的Manifest文件的话,请确认添加"manifest_version": 2.
Google发布的Manifest v2中支持的域
后台页
大多数扩展都会在其manfiest.json文件内有这样的内容:
1
2
3
4
5
{
"background": {
"scripts": ["index.js", "other.js"]
}
}
这一段代码指定了两个需要被加载而且要保持在后台运行的脚本,这些脚本会在扩展的后台页运行。后台页是一个在扩展的进程中生成并运行的页面,存在时间会和扩展的生命周期等长。后台页可用来作为扩展的其他界面的控制器,用来维护某个状态或者保持某些活动。如果你需要用后台页来声明一些标记来用,可以把一个HTML文件名指定给page选项。事件页
后台页会从扩展被加载的时候被装载,而且会一直留在内存里。这是因为如果有些状态需要被长时间维护,或者需要被扩展的其他部分访问。但是如果你没有这个需求,那么应该尽可能的使用事件页。事件页其实只是相当于一个包含了”persistent”: false条目的后台页,这一行语句告诉Chrome可以不需要把后台页保留在内存里。相对来说,事件页也会在最开始被装载,但是一旦指定的脚本运行完毕,事件页便会从内存卸载,而且会在需要的时候被再次加载(比如用来回应某些操作)。以上便是在为扩展添加功能之前所需要知道的。
交互
利用Google提供的大量API,你的扩展与浏览器交互或者为用户提供功能都变得方便。
chrome.* APIs
Chrome的程序和扩展程序都非常喜欢调用chrome.* APIs,这些API可以让你通过不同的方式来操控浏览器,API通常会在后台脚本里面被调用,这是我找到的一些常用API:
chrome.tabs 标签页:新建、刷新、关闭、访问和操控标签页
chrome.history 历史:访问用户浏览历史
chrome.bookmarks 书签:添加、编辑、移除和搜索用户书签
chrome.events 事件:监听或者管理浏览器发生的事件
chrome.commands 命令:添加或者改变键盘命令
chrome.contextMenus 右键:添加条目到右键下文菜单
chrome.omnibox 多功能框(地址栏):添加多功能框关键字,使用户可以向扩展发送指令或者激活扩展
其他API
Chrome程序和扩展程序通常也会用到其他的API,包括如本地存储、地理位置、缓存、画布等新型的HTML5 API。你也可以用普通的JavaScript或者webkit API来实现。声明权限
有些Chrome API的功能必须要在manifest.json文件中声明相关权限才能被调用,通过在permissions 域中把值设成相应权限名称,或者是通识符组成的数组。
1
2
3
4
5
6
7
8
{
"permissions": [
"contextMenus",
"tabs",
"https://google.com/*",
"https://developer.mozilla.org/*"
]
}
在这一段声明代码中,数组中的头两个字符串是分别用来为chrome.contextMenus和chrome.tabs 的API授权的,最后的两个字符串则是用来匹配以 https://google.com/ 和 https://developer.mozilla.org/ 开头的地址。用户界面
Chrome扩展的用户界面有着严格的限制,但是根据扩展的需要却可以有不同形式的界面。浏览器按钮[a]
浏览器按钮允许你在右上角放置一个的16 x 16像素的图标,如果扩展应用的界面是全局的,而不是针对某个页面,那就应该使用浏览器操作。如果要使用浏览器按钮,你必须在manifest.json中的browser_action域中做如下声明:
1
2
3
4
5
6
7
8
9
10
{
"browser_action": {
"default_icon": {
"19": "images/icon19.png",
"38": "images/icon38.png"
},
"default_title": "tooltip text here",
"default_popup": "popup.html"
}
}
一个浏览器按钮可以有一个图标、提示、文字标记和一个弹出内容,文字标记可以将极少的文字(4字符)动态的覆盖在浏览器操作的图标上,你也可以通过chrome.browserActionAPI来对浏览器按钮相关的事件做出反应。页面按钮
页面按钮允许你在多功能栏(地址栏)右边添加一个按钮,其实他和浏览器按钮很相似,区别之处在于页面按钮是专门用来处理某些指定的页面的。页面按钮必须在manfiest.json中声明, page_action域的使用和浏览器按钮一样。页面按钮可以通过chrome.pageAction API控制,可以在不同的标签页中灵活的显示或者隐藏。页面按钮也可以设置图标、提示和弹出内容,和浏览器按钮不同的是其没有文字标记功能。右键菜单
右键菜单是另一个提供用户界面,方便用户和扩展交互的方式。Chrome的右键菜单通过右键激活,但根据激活内容的变化,菜单内容也会做相应改变。
chrome.contextMenusAPI允许你向为不同内容激活的右键菜单添加项目,若要使用此API,则在manifest.json文件中声明相应的contextMenus权限。
目前可用的激活内容有:
all, page, frame, selection, link, editable,image, video, audio
对应:所有内容、页面、框架、选择、链接、可编辑、图像、视频、音频,以下这个例子需要contextMenus 和tabs权限,他可以使扩展为右键菜单添加一个根项目,然后添加一个子菜单,用来复制当前的页面到一个新选项卡。[b]
1
2
3
4
5
6
7
8
9
10
11
12
13
var root = chrome.contextMenus.create({
title: 'MyExtension',
contexts: ['page']
}, function () {
var subMenu = chrome.contextMenus.create({
title: 'Duplicate Tab'
contexts: ['page'],
parentId: root,
onclick: function (evt) {
chrome.tabs.create({ url: evt.pageUrl })
}
});
});
多功能框
Chrome把地址栏/搜索栏称为多功能框,通过chrome.omnibox API,他可以让扩展有另一个界面。通过API 可以设置一个特定的激活字符串,当这个字符串被键入多功能框时扩展便可以对其做出反应。在manifest.json中做如下声明:
1
2
3
4
5
{
"omnibox": {
"keyword": "ext-"
}
}
这部分代码会把ext-作为激活字符串,当用户键入ext-并按下SPACE键或者TAB键时扩展会被激活。激活字符串必须通过manifest.json文件声明,故也不能通过JavaScript来更改。用户可以通过右键单击多功能框—–修改搜索引擎来更改。激活字符串是大小写敏感的,同时想为一个扩展声明多个激活字符串也是不可以的。
chrome.omnibox API可以让你添加激活字符串被键入之后的修改或者输入的事件处理器。选项页面
选项页面是一个的常见的用户界面,在chrome://extensions里可以通过单击扩展右边的选项按钮来打开。通常这个页面会和存储API结合使用,以用来在计算机上为用户保存设置。而使用脚本通过chrome.tabsAPI来打开选项页面也是可以的。页面重载
页面重载允许你完全替代一个以下指定页面(一个扩展程序只能重载一个页面)
书签管理器
通过访问chrome://bookmarks或者Chrome菜单打开的页面
历史
通过访问chrome://history或者Chrome菜单打开的页面
新选项卡
通过访问chrome://newtab或者新建选项卡出现的页面
这些被替换的页面必须在manifest.json文件中如下声明chrome_url_overrides域:
1
2
3
4
5
{
"chrome_url_overrides": {
"bookmarks": "newBookmarkManager.html"
}
}
内容脚本
内容脚本是和你的扩展有关,在网页中运行的脚本。这个脚本可以让你访问页面里相应的DOM元素,你可以像这样在manifest.json里通过指定content_scripts域定义一个内容脚本数组:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"content_scripts": [
{
"matches": ["http://www.google.com/*"],
"css": ["custom-google-styles.css"],
"js": ["custom-google-script-1.js", "custom-google-script-2.js"]
},
{
"matches": ["http://*"],
"css": ["global-styles.css"],
"js": ["global-script.js"]
}
]
}
你也可以用通过chrome.tabs API以动态的把JavaScript或者CSS注入网页。
内容脚本有以下限制:
不能使用chrome.* API (chrome.extension的部分除外)
不能使用由扩展脚本定义的变量或函数
不能使用由网页所定义的变量或函数
不能使用由其他内容脚本定义的变量或函数
内容脚本可以通过消息传递间接的使用chrome.* API,或者是和扩展脚本交互。