- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不仅速度更快,而且在速度和使用资源/内存方面都更好。
我有一个应用程序,当用户输入输入类型文本时,我会在其中提出建议。那么,我应该使用 ajax 在两个页面之间进行通信还是使用 chrome.extension.sendRequest 呢?
编辑
我有一个打包的应用程序,所有应用程序信息都存储在 background.html 的 websql 数据库中。 index.html 上有一个 input-type-text (当有人点击应用程序 Logo 表单新标签页时打开)
index.html 上的输入在用户输入时从 background.html 的数据库中获取建议。 (就像你开始在谷歌主页上输入查询时谷歌所做的那样)我可以通过两种方式获取建议数据,使用 XmlHttpRequest 和通过 chrome 的消息传递 api。由于会有很多对 background.html 的请求,我想知道哪种方法更有效..
有问题的应用程序:https://chrome.google.com/webstore/detail/fddboknafkepdchidokknkeidnaejnkh?hl=en-US
编辑 2
该应用程序是 100% 离线的。我没有连接到任何服务器或网站。我没有加载任何外部脚本,甚至没有 jquery。应用程序连接到的所有文件都是它自己目录中的文件。 pc 启动时加载 background.html,当用户单击新标签页中的应用程序图标时加载 index.html。要查看所有操作,您可以安装该应用程序并亲自查看。
编辑 3
我正在使用常规 ajax 从 background.html 调用 index.html,它似乎工作正常。顺便说一句,index.html 和 background.html 都在 'html' 目录中。
function ajaxcall(url,callback) {
var call = new XMLHttpRequest();
call.onreadystatechange=function() {if(call.readyState==4) callback(call.responseText);}
call.open("GET",url+'#'+Math.random(),true);
call.send(null);
}
ajaxcall('/html/index.html', function(response) {console.log('foo')});
最佳答案
您应该使用 message passing API每当您想在内容脚本和其他页面之间进行通信时。我不明白你想如何在这里使用 ajax。
如果您在后台页面和浏览器操作弹出窗口之间进行通信,您也可以使用 chrome.extension.getBackgroundPage
它只会返回 window
来自背景页面的对象。由于对内容脚本施加的限制,您不能在内容脚本中使用此功能。这意味着您将始终必须为内容脚本使用消息传递 api。
不要被这些消息传递函数的异步特性所迷惑。 Chrome 团队的设计考虑是在任何地方都使用异步函数(带有回调)。这并不意味着他们需要很多时间来执行。尽管我没有对它们进行基准测试,但它们似乎几乎可以立即执行。
编辑
我误解了你的问题。我以为您在询问如何在扩展程序/应用程序中的不同页面之间进行通信。您真正要问的是如何与 Web 服务器通信。
message passing API ( sendRequest
) 仅适用于应用程序不同部分之间的通信。之所以使用此 API,是因为您的应用程序的不同部分运行在不同的环境中,这些部分称为 isolated worlds。 .这些环境彼此完全分开,以保护您免受恶意代码的侵害。通过这些不同环境的唯一针孔是这个消息传递 API。
如果您想与 Web 服务器(您称其为“页面”)通信,则需要使用 ajax。使用 ajax,您还会注意到 Chrome 的严格安全模型。在正常情况下,网页只允许向其来源的同一站点发出请求。这称为' same origin policy '。因为您的扩展程序/应用程序未托管(已打包),所以默认情况下它无权访问 Web 服务器。作为开发人员,您必须向用户请求此权限。您可以通过填写 permissions
来做到这一点。扩展 list 中的属性。每当用户安装您的应用程序时,他必须 accept您有权访问某个 Web 服务器。
当我阅读您的问题时,我假设您仍然不太熟悉 Chrome 扩展程序、应用程序、Ajax 和浏览器中的策略。我鼓励您在开发应用程序时进一步阅读这些主题,以确保用户的安全。
编辑 2
好的,所以您正在应用程序的两个不同部分之间进行通信,即 index.html 和 background.html。为此,您可以使用 getBackgroundPage
并直接调用后台页面中定义的函数。您所做的是以下内容:在您的背景页面中:
window.getSuggestions = function(query) {
// search database for query
return ['suggestion1', 'suggestion2'];
};
var backgroundPage = chrome.extension.getBackgroundPage();
var mySuggestions = backgroundPage.getSuggestions('suggestion');
console.log(mySuggestions);
sendRequest
为了这。根本没有异步代码。您可以以同步方式调用一个函数,这将被返回:
['suggestion1', 'suggestion2']
XmlHttpRequest
在您的扩展中,但如果可能的话,我希望它是最慢的方式,因为您实际上是在进行网络调用而不是调用内存中的对象。如果您想确定时间,我建议您自己对它们进行基准测试。您可以使用以下代码轻松地使用 Chrome 执行此操作:
console.time('someID');
// perform heavy operation(s) here.
console.timeEnd('someID');
关于javascript - chrome 扩展 : Which will be better, ajax 或 chrome.extension.sendRequest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6334999/
我有一个问题,我想通过其他程序打开 chrome://extensions/页面,例如 cmd.exe 或其他程序。 我们知道,如果我们用chrome.exe打开一个网站,我们可以在cmd.exe中执
当您编写manifest.json 文件时,您必须为内容脚本指定匹配。 http 和 https 工作正常,但如果我尝试包含 chrome://*/* 或其任何变体,我会得到一个我尝试对我的匹配使用无
我真的很困惑我想制作一个可以扩展用户的Google日历的Chrome扩展程序,我应该在Google API下注册哪种程序? 它是Web App吗?但是我不打算让服务器托管任何东西,因为Chrome扩展
我想在带有chrome-extension://URL的iframe上运行内容脚本。我在我的manifest.json文件中添加了一行代码,该行是从http://code.google.com/chr
目前,我正在使用记事本和 chrome 控制台的组合对我的 google-chrome-extensions 进行编码。我 100% 确信有更好的方法来对这些扩展进行编程。人们使用什么环境? 最佳答案
在编写 manifest.json 文件时,必须指定 matches用于您的内容脚本。 http和 https工作正常,但如果我尝试包含 chrome://*/*或它的任何变体,我收到一个错误,提示我
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve
在发布更新后,我正在尝试为我的 Chrome 扩展程序的用户创造流畅的体验。 我在更新应用程序时重新注入(inject)了我的内容脚本,即使用户继续在扩展更新后未刷新的页面上使用我的扩展,我的功能仍然
将扩展程序从 Chrome 移植到 FF 遵循本教程(在 Chrome 中运行良好):http://www.codingscripts.com/check-whether-user-has-a-chr
我正在将 google-chrome 扩展改编成 firefox。 这个扩展相当简单,它只是重新加载当前浏览器窗口并在其中放置一个特定的字符串(它用于在 Odoo 上激活调试状态)。 但是,当我在 m
我正在尝试在普通 HTML 页面(非扩展)中链接到 chrome://extensions。但是单击链接不会执行任何操作: chrome://extensions 右键单击并在新选项卡中打开只会打开
为 String 编写扩展名很容易,但问题是它总是显示为 "MyString".ExtensionMethod() 如果这样写: public static class Extensions{
如题。我正在运行 Joomla 2.5。 “扩展”下拉菜单中唯一可见的项目是: 模块经理 插件管理器 模板管理器 语言经理 编辑:我这样做是为了安装模板,按照此页面上的说明:http://docs.j
基本上我希望文件名以扩展名列表中的扩展名结尾。这是我在 python 中的代码。我已经将一些示例文件名作为列表,如下所示: extensions = ['.mp3','.m4a','.wma'] fi
在 background.html : chrome.tabs.query({active:true, currentWindow:true},function(tabs){ chrome.tab
我有一个可能被用户禁用的 chrome 扩展。在这种情况下,我想创建一个指向 chrome://extensions 菜单的链接。它会是这样的 Chrome extensions 这是不允许的:不允许
我查看了 Google 文档,但不知道如何更改其类型。 这是我加载时遇到的错误。 尝试安装此扩展时出现警告:“browser_action”仅允许用于扩展程序,这是一个旧版打包应用程序。 这是我的ma
我有一个正在构建的 chrome 扩展,它使用 OAuth 访问许多 API。我没有将我的消费者 secret 存储在扩展程序中,而是重定向到获取 token 的服务器,然后重定向回我的扩展程序中的页
我有一个正在构建的 chrome 扩展,它使用 OAuth 访问许多 API。我没有将我的消费者 secret 存储在扩展程序中,而是重定向到获取 token 的服务器,然后重定向回我的扩展程序中的页
这个问题已经有答案了: Why would a developer place a forward slash at the start of each relative path? (4 个回答)
我是一名优秀的程序员,十分优秀!