javascript - Safari 扩展,直接从工具栏访问页面/内容?

标签 javascript safari safari-extension

是否可以直接从 (Safari) 工具栏访问 Web 内容?我现在可以从上下文菜单访问它,但不知道我如何在工具栏上获得相同的功能。

这是我得到的:

// injected
document.addEventListener("contextmenu", handleMessage, false);
function handleMessage(msgEvent) {
     var sel = '';
     sel = window.parent.getSelection()+'';
     safari.self.tab.setContextMenuEventUserInfo(msgEvent, sel);
}

// global
safari.application .addEventListener("command", performCommand, false); 
function performCommand(event) {
console.log('performCommand');
     if (event.command == "abc") {
          var query = event.userInfo;
          console.log(query);
          alert(query);
     }
}

但是我如何直接从工具栏获取这些内容??

最佳答案

好的,基本上它是这样工作的:

  • 在全局调用 performCommand(通过单击工具栏),调度事件
  • 此事件在 handleGextText 中捕获
  • 在 handleGextText 中,您执行需要执行的操作并调用 safari.self.tab.dispatchMessage 这会将事件分派(dispatch)回全局
  • 在全局范围内,事件被 handleEvent 捕获

>

// Global Script
safari.application.addEventListener("command", performCommand, false);  
safari.application.addEventListener("message", handleEvent, false);

// send message
function performCommand(event) {
    console.log('command:' + event.command);

    if (event.command == "abc") {
        console.log("msg: my message");
        safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("msg", "do-something");           
    }       
}

function handleEvent(event) {
    var messageName = event.name;
    console.log("evenname:" + event.name);      
    if (messageName === "did-something") { 

        var msg = event.message;

        // do something
    }       
}


// Injected Script
if (window.top === window) { // inject only once!
    console.log("add event listners [injected.js]");
    safari.self.addEventListener("message", handleGextText, false);
}

function handleGextText(event) {
    console.log("evenname:" + event.name);
    console.log("evenmsg :" + event.message);

    var messageName = event.name;
    var messageData = event.message;
    if (messageName === "msg") { 
        if (messageData === "do-something") {           
            console.log('msg received: ' + event.name);
            var sel = '';

            // do what you need to do and  dispatch message back to Global
            console.log("send message to toolbar");             
            safari.self.tab.dispatchMessage("did-something", sel);          
        }
     }
}

关于javascript - Safari 扩展,直接从工具栏访问页面/内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7525779/

相关文章:

html - 屏幕外绝对定位 Div 导致水平滚动

iphone - 网站导致移动Safari崩溃(可复制)

xcode - Safari 扩展伴侣始终为空

javascript - TextFinder 的替代方案或搜索多个字符串

javascript - 仅在 Safari 浏览器中未触发 Keyup 事件?

c# - 在 UpdatePanel 中使用 ClientValidationFunction (JavaScript)

javascript - 识别 Safari 扩展中上下文菜单事件的链接

javascript - 使用 JavaScript 解析带有竖线字符的短语

javascript - (dojo)Observable无法观察到Memory Store的变化

javascript - 为什么在别处点击鼠标会触发onmousedown?