MenuItem.contexts

By Opera Software

From Opera 15 onward, Opera 11 & 12’s extension format is no longer supported, and instead, we’ve switched to Chromium’s extension model. Check out our new documentation for developing extensions for Opera 15 and higher and start building your own extensions.

Description:

The contexts attribute is used to define the list of contexts that this context menu item will appear in. The list of valid context values for this attribute include all, page, frame, selection, link, editable, image, video and audio. The default value is an array with a single entry of page.

Syntax:

DOMString[] contexts

Example:

The following example creates an item in the context menu to open links in private tabs. In other words, the "Open link in private tab" item will appear only when a link is right-/Ctrl-clicked.

<!--
  The configuration file ('config.xml').
-->
<?xml version='1.0' encoding='utf-8'?>
<widget xmlns="http://www.w3.org/ns/widgets">
    ...
    <feature name="opera:contextmenus"/>
    ...
</widget>
//
// The background process (e.g. index.html)
//

if (opera.contexts.menu) {
  var menu = opera.contexts.menu;
  // Create a menu item properties object
  var itemProps = {
    title: 'Open link in private tab',
    contexts: ['link'],
    onclick: function(event) {
      // Create a tab properties object
      var tabProps = {
        url: event.linkURL,
        private: true
      };

      // Create a tab with the specified properties
      var tab = opera.extension.tabs.create(tabProps);
    }
  }

  // Create a menu item with the specified properties
  var item = menu.createItem(itemProps);
  // Add the menu item to the context menu
  menu.addItem(item);
}

This article is licensed under a Creative Commons Attribution 3.0 Unported license.

Comments

  • photo

    Darko Pantić

    Friday, August 24, 2012

    A little explanation about valid context values would be nice. I could guess which value is related to which menu, but why should I guess. Am I reading specification or what?
  • photo

    Christoph

    Wednesday, October 24, 2012

    This is pretty limiting. I'd love to see the ability to show it only on certain elements.
    e.g. I'm writing an extension that injects some buttons into all web pages. They might cover something on certain websites though, so I need a way to hide them which would be perfect to achieve using the context menu. But therefore it does only make sense to show the entry on those injected elements and not the rest of the page.

    Can we get this functionality (i.e. showing on elements with distinct IDs only)?
  • photo

    izydoringwari

    Thursday, November 15, 2012

    +1 on Christoph's suggestion. It would be great to narrow a context menu item to nodes with specific attributes. I created an extension which injects a button to every page. I would like the user to be able to send me some feedback by right-clicking the button and selecting a context menu item, but that item would have to be visible only when right-clicking my injected button.

    In my opinion the best solution would be by a css selector, so we could narrow the context menu down to a specific element or expand it to a wider group of elements.
  • photo

    xenomonkey

    Monday, January 7, 2013

    I cannot get a contextMenu item with context of ['editable'] to work in Opera 12.12 (build 1707). This appears to be a Mac only problem as it works fine on Opera 12.12 (build 1707) on Windows 7.
No new comments accepted.