我有一个可以在Firefox,IE和Chrome中运行的浏览器扩展程序,我现在将它移植到safari中.
我按照苹果开发者网站上的说明进行操作,并将扩展文件夹重命名为myext.safariextension.我拿到了证书,我认为safari扩展构建器可以识别它.
但是,由于某种原因,创建扩展失败.我收到以下消息:

我不知道如何解决这个问题.谷歌搜索,SO搜索和在SO聊天室询问没有结果.
任何帮助将不胜感激,即使它只是指导我找到正确的解决方案.如果这有帮助,这是Windows 5上的Safari 5.
我知道你可以获得font-family值,window.getComputedStyle()但这并不总是浏览器用来呈现的字体.例如,如果给定的文本包含(多语言)文本的字体族不携带,浏览器呈现部分地与系统字体的文本.
如果你看一看内置的web开发工具,无论是在Chrome或Firefox,他们都有一个小区域,以显示(Rendered Fonts在Chrome窗格或Fonts选项卡上的Firefox浏览器)所使用的确切的字体.对于Firefox,我想这个代码是用的,它似乎是在调用内部API.
我正在寻找任何符合DOM(或特定于供应商)的方式来从JavaScript土地获取确切的字体.如果这意味着编写浏览器扩展/附加组件以提供API /注入信息/任何内页代码访问,这是最糟糕的情况,但可以接受.
有没有办法将消息从全局页面发送到特定选项卡?
我目前正在做的是,在创建选项卡时,注入的脚本会创建一个唯一的 ID,并将带有此编号的消息发送到全局页面,全局页面会保存此编号。  
如果全局页面需要将一些数据发送到选项卡(即: tab #3),则全局页面将向所有选项卡“广播”一条消息,并将该编号#3作为传递给选项卡的数据的一部分(遍历所有选项卡并发送一个消息发送到每个选项卡)。
有没有像 Chrome: (ie: chrome.tabs.sendRequest(tabID, {action: 'respond', params:[channel,msg,async]});)这样的东西?
现在我正在做的是在注入的脚本端,每个脚本都有一个监听器来捕捉这个消息。如果内容脚本唯一编号等于全局页面发送的编号,则此消息是给它的,否则doNothing。
在 Safari 中是否有更简单更优雅的方法来做到这一点?
我正在研究facebook中的浏览器扩展,现在我的问题是facebook覆盖了setTimeout和setInterval本机函数,它们的实现在Internet Explorer上不起作用.
有没有办法实现这些功能?
javascript internet-explorer settimeout setinterval browser-extension
我正在使用chrome扩展,我的清单加载了一个背景页面:
...
  "background": { "scripts": ["background_page.js"], "persistent": false },
...
.js代码如下所示:
var once = false;
window.addEventListener("load", function () {
    if ( once == true ) { return; }
    alert( 'test' );
    once = true;
}, false);
这似乎工作正常,但我想每次浏览器启动时只运行一次background_page.js代码.
现在,我不知道为什么,但代码执行不止一次.起初我以为每次打开新标签时都会执行,但情况并非如此.一旦我启动浏览器就会出现警报,然后如果我快速打开一个新标签,警报就不会出现,但是如果我等待大约1分钟左右并打开一个新标签,则警报会再次出现.
如何确保每次浏览器启动时background_page.js代码只运行一次?
browser google-chrome browser-extension google-chrome-extension
有谁知道如何从命令行加载解压缩的谷歌浏览器插件?我尝试了以下,但它不起作用:
"C:\Users\<name>\AppData\Local\Google\Chrome\Application\chrome.exe" --load-extension="<path/to/unpacked/extension>"
上面的命令只打开一个chrome浏览器窗口,但不加载我的扩展名.
我需要在扩展中使用时间来计算浏览器.如果我可以检查浏览器是否处于活动状态,那么很容易计算时间.这怎么可能在交叉驾驶者?
var focused = true;
window.onfocus = window.onblur = function(e) {
    focused = (e || event).type === "focus";
}
alert(focused);
我在background.js中尝试了这个代码,但即使我最小化浏览器窗口,它总是显示"true".
我对浏览器扩展完全陌生。我已经成功制作了一个自动更改网页内容的简单扩展,现在我希望它在查询服务器的 true 或 false 值后更改该内容。我正在尝试使用 AJAX 请求(纯 JavaScript)来做到这一点。由于某种原因,我无法从与浏览器扩展交互的服务器上的 PHP 脚本中获取任何信息。
显现:
{
  "manifest_version": 2,
  "name": "Truth Seeker",
  "version": "1.0",
  "description": "Returns true.",
  "icons": {
    "48": "icons/icon.png"
  },
  "content_scripts": [
    {
      "matches": ["*://*/*"],
      "js": ["script.js"]
    }
  ]
}
脚本:
theBool = false;
url = /* PHP URL HERE */;
string = "";
request(MakeOutput, url, string);
if(theBool == true){
    alert("is true");
}
function MakeOutput(x){
    if(x == "true"){
       theBool = true; 
    }
}
function request(fix, url, string){         
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange …我不太明白 Chrome 扩展 API 是如何工作的。很难理解background.js和content.js是如何工作的,但我当前的问题是,函数insertCSS(); 似乎需要 tabId,即使官方文档说它是可选的。
所以,这个平台上的答案都不能帮助我,因为我什至不理解整个 API 的概念。
那么有人可以解释一下为什么这样的事情不可能吗?
var tabInfo = chrome.tabs.getCurrentTab();
var id = tabInfo.tabId;
我正在编写一个 Chrome 扩展程序,用于显示与视频同步的内容。
我需要等到观看者完成广告/中贴片后才能显示内容。我如何通过 javascript 执行以下操作?
if (videoOnAd == true) {
//do something
} else {
//do something else
}
提前致谢!
javascript youtube dom browser-extension google-chrome-extension
javascript ×6
safari ×2
add-on ×1
ajax ×1
browser ×1
crossrider ×1
dom ×1
firefox ×1
fonts ×1
setinterval ×1
settimeout ×1
youtube ×1