Rob*_*son 12 safari safari-extension
我正在构建我的第一个Safari扩展 - 一个非常简单的扩展 - 但我遇到了一些问题.扩展名归结为单个注入脚本,该脚本尝试绕过本机Feed处理程序并重定向到http:// URI.到目前为止,我的问题有两个:
beforeload事件处理程序,但无法使用safari.extension.settings文档中指示的路径访问我的设置.我没有在Apple的文档中找到任何内容,表明我的脚本不应该提供设置.由于扩展功能是一项新功能,因此即使是Google也会返回有限的相关结果,其中大部分都来自官方文档.
我错过了什么?
谢谢.
更新
所以我希望文档不完整,因为它的边界非常糟糕,但我已经了解了一些设置.事实证明,从注入脚本,该SafariExtensionSettings对象不可用.注入脚本只能访问该SafariContentExtension对象(根本没用),但它的别名方式完全相同(safari.extension.settings) - 坏主意,IMO.如注入脚本文档中所述:
重要提示:当您在注入的脚本中使用safari.extension时,您不会处理SafariExtension类.您正在处理SafariContentExtension类.
您必须使用消息传递系统与可以访问设置的全局HTML文件进行通信.它有点循环,但是我有一条消息被发送到一个global.html文件来检索设置,并且一旦我弄清楚如何去做,就会将消息发送回我的注入脚本.
由于我做所有我的工作文件加载之前,所有的方法,我发现要发送消息回靠,我没有一个网页对象.
就像其他人一样,我仍然在攀登学习曲线,但这就是我如何处理这个问题:
我有一个简单的扩展,没有chrome和一个注入的结束脚本(script.js).为了加载设置,我添加了一个简单的全局页面(proxy.html).注入script.js时,它会向getSettingsproxy.html 发送一条消息.proxy.html以setSettings消息响应,并且script.js继续初始化.
我在这个主题的文档中找到的最有用的页面是Messages和Proxies.
proxy.html:
<!doctype html>
<html lang="en">
<head>
<script type="text/javascript">
safari.application.addEventListener( "message", function( e ) {
if( e.name === "getSettings" ) {
e.target.page.dispatchMessage( "setSettings", {
sort_keys: safari.extension.settings.getItem( "sort_keys" )
} );
}
}, false );
</script>
</head>
<body></body>
</html>
Run Code Online (Sandbox Code Playgroud)
的script.js:
( function() {
var settings, init = function() {
// do extension stuff
};
// listen for an incoming setSettings message
safari.self.addEventListener( "message", function( e ) {
if( e.name === "setSettings" ) {
settings = e.message;
init();
}
}, false );
// ask proxy.html for settings
safari.self.tab.dispatchMessage( "getSettings" );
}() )
Run Code Online (Sandbox Code Playgroud)
我花了几天时间,但我认为我使用canLoad()消息传递方法找到了一个可行的解决方案。我的注入脚本通过调用全局 HTML 页面来检索设置,如下所示:
settings = safari.self.tab.canLoad( event );
Run Code Online (Sandbox Code Playgroud)
我的全局 HTML 文件又将这些设置返回为:
settings = {
'setting1': safari.extension.settings.getItem( 'setting1' )
}
msgEvent.message = settings;
Run Code Online (Sandbox Code Playgroud)
它仍然比我想要的更“hacky”。我似乎无法简单地返回设置对象本身,因此我必须通过手动检索每个设置来编译一个新对象。虽然不理想,但似乎确实有效。
| 归档时间: |
|
| 查看次数: |
8961 次 |
| 最近记录: |