是否可以直接从 (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/