0

所以我正在制作一个供我个人使用的 Safari 扩展程序,但它根本不起作用。我正在尝试跳过 adf.ly 并直接访问该网站。但它根本没有做任何事情。我已经尝试提醒当前 URL 和假定的新 URL,但它们甚至都没有显示。

全球.html

<!DOCTYPE html>
<script type='application/javascript'>
// Skip Adf.ly 
// Made by Austen Patterson
// For Safari
//(C) Copyright 2013 Austen Patterson.

safari.application.addEventListener("start", performCommand, true);  
safari.application.addEventListener("validate", validateCommand, true);


// Function to perform when event is received  
function performCommand(event) {  
    // Make sure event comes from the button  
    if (event.command == "skip") {  
    var url = this.activeBrowserWindow.activeTab.url;
    var newurl = url.replace(/http:\/\/adf\.ly\/(\d+)\//, '');
    location.href(newurl);
    window.open(newurl,"_self");
    return;

    }  
}  

</script>

这是我的扩展生成器设置。 在此处输入图像描述

4

1 回答 1

0

您不能alert从全局页面使用。不过,您可以使用 console.debug,这应该会有所帮助。

但更大的问题是您将全局页面视为可以访问您尝试通过window对象修改的页面。它不是那样工作的。location.href不指向任何东西,并且window.open可能无法在全局范围内工作。(这些都是泄漏的全局变量,这是您要避免的。)我还没有测试过,但是这样的事情应该可以工作:

safari.application.addEventListener("beforeNavigate", function adflyChecker(event) {
    var url = event.url.replace(/http:\/\/adf\.ly\/(\d+)\//, '');
    safari.application.activeBrowserWindow.activeTab.url = url;
}, true);

这具有进行导航的优点,并且不需要您手动单击按钮。如果您将扩展配置为仅适用于adf.lyURL,那么您可以确保您的代码仅在适当的时候触发。

有关 Safari 扩展架构的更多信息,请参阅文档

于 2013-07-01T03:04:44.183 回答