Google chrome extension Chrome内联安装只有一半的时间有效

Google chrome extension Chrome内联安装只有一半的时间有效,google-chrome-extension,failed-installation,chrome-web-store,Google Chrome Extension,Failed Installation,Chrome Web Store,我们已经为我们的应用程序设置了一个简单的内联r 应用程序站点已被验证。内联安装对我们公司内的一半人来说是正确的,但对另一半人来说却不正确。他们将得到“UncaughtTypeError:无法调用未定义testsupport.html:15的方法'install' 未捕获SyntaxError:意外标记)。这就好像chrome或chrome.web变量未初始化一样 为什么内联安装只能在某些机器上工作,而不能在其他机器上工作?所有这些机器都有相同的chrome浏览器版本 TIA我收到了您提到的错误,

我们已经为我们的应用程序设置了一个简单的内联r

应用程序站点已被验证。内联安装对我们公司内的一半人来说是正确的,但对另一半人来说却不正确。他们将得到“UncaughtTypeError:无法调用未定义testsupport.html:15的方法'install' 未捕获SyntaxError:意外标记)。这就好像chrome或chrome.web变量未初始化一样

为什么内联安装只能在某些机器上工作,而不能在其他机器上工作?所有这些机器都有相同的chrome浏览器版本


TIA

我收到了您提到的错误,并且有一个弹出窗口允许我安装扩展。因此,可能每个人都收到了错误,但对于某些人来说,它阻止了安装

我通过在
href
中用
#
替换
javascript:void()
来消除错误

<a href="#" onclick="chrome.webstore.install()">CaptureToCloud Chrome Extension Installation</a>

我以前没有看到过这个问题,但我会尝试提供一个我用来管理多个Chrome扩展的详细设置

在每个页面的
head
节点内(可选,仅包含一个或多个安装链接的页面)我向Chrome Web Store上的每个扩展/应用页面添加所需的链接。这使我能够轻松地在页面上的任何位置为各种扩展/应用添加安装链接。一旦DOM完成加载,JavaScript只需将事件处理程序绑定到每个安装链接。此事件处理程序的唯一目的是安装扩展/应用程序t单击时链接到,然后更改其状态以防止进一步的安装尝试


...
//确保DOM已完全加载
document.addEventListener('DOMContentLoaded',function(){
//支持其他浏览器
var chrome=window.chrome | |{};
if(chrome.app&&chrome.webstore){
//获取所有安装链接
var links=document.querySelectorAll('.js chrome install');
//创建“单击”事件侦听器
var onClick=函数(e){
var=这个;
//尝试安装扩展/应用程序
chrome.webstore.install(that.href,function()){
//更改按钮的状态
that.innerHTML='Installed';
删除('js-chrome-install');
//防止尝试安装时再次单击
removeEventListener('click',onClick');
});
//阻止打开Web应用商店页面
e、 预防默认值();
};
//将“单击”事件侦听器绑定到链接
对于(变量i=0;i
为了使此系统能够完全工作,您还需要支持用户在安装扩展/应用程序后返回您的网站的场景。尽管官方文档建议使用
chrome.app.isInstalled
但当可以从一个页面安装多个扩展/应用程序时,这不起作用。若要避免此问题,请问题:您只需向扩展名/应用程序添加一个内容脚本,如下面的install.js文件

//获取正在运行的此扩展/应用的所有安装链接
var links=document.querySelectorAll('.js chrome安装[href$=dcjnfaoifemnbhhlbpabgnccfdf]');
//更改所有链接的状态
对于(变量i=0;i
然后,您只需要修改manifest.json文件,以确保此内容脚本在您的域上执行

{
...
“内容脚本”:[
{
“js”:[“install.js”],
“匹配项”:[“*://*.yourdomain.com/*”],
“运行时间”:“文档结束”
}
]
...
}
这将导致内容脚本在您网站上的JavaScript之前运行,因此在执行
js chrome install
类时,不会有与该类的安装链接,因此不会绑定任何事件处理程序等

下面是我如何使用这个系统的一个例子

主页:

项目主页:


项目源代码:

您的内联安装标记是:

<a href="#" onclick="chrome.webstore.install()">
  CaptureToCloud Chrome Extension Installation
</a>
或者,您可以从
onclick
处理程序
返回false
,以阻止导航:

<a href="#" onclick="chrome.webstore.install(); return false;">
  CaptureToCloud Chrome Extension Installation
</a>


(虽然由于您实际上没有链接到任何地方,使用
标记没有多大意义)

谢谢您的建议,但使用该替换,我仍然得到了相同的结果,即没有弹出窗口。^(我添加了一些警报()测试发现变量chrome已定义,但未定义chrome.webstore。不知何故,head元素中的未能发挥其注入魔力。我将fiddler调试工具的输出与此页面工作的机器上的输出进行了比较,但看不到两者之间的任何区别。我也在用一个恼人的“我”来插话"这里。我有同样的问题,chrome.webstore对象没有定义。当我试图通过你发布的测试页面安装你的扩展时,我总是会看到安装对话框。我想知道扩展是否必须公开发布?我已经发布给测试人员,我是其中之一,我可以看到CWS页面没有问题。我一直在尝试g本页上的方法,但似乎没有任何效果。我只是想指出一些关于CWS内联安装的事实,我通过艰苦的学习了解到:CWS项目必须向公众发布;它不能只向测试人员发布。此外,发布后,在二进制文件通过谷歌网络传播之前,需要等待一段时间。当我第一次按下分机上的“发布”按钮,然后尝试快速执行cli时
<a href="#" onclick="chrome.webstore.install(); return false;">
  CaptureToCloud Chrome Extension Installation
</a>