{"id":6140,"date":"2021-03-26T10:14:33","date_gmt":"2021-03-26T18:14:33","guid":{"rendered":"https:\/\/officedevblogs.wpengine.com\/?p=6140"},"modified":"2021-03-26T10:14:33","modified_gmt":"2021-03-26T18:14:33","slug":"tips-for-using-the-shared-javascript-runtime-in-your-office-add-in%e2%80%af","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/tips-for-using-the-shared-javascript-runtime-in-your-office-add-in%e2%80%af\/","title":{"rendered":"Tips for using the shared JavaScript runtime in your Office Add-in\u202f\u00a0"},"content":{"rendered":"<p><i><span data-contrast=\"auto\">This blog is the\u202fsecond\u202fof a series highlighting the shared runtime feature of the Office Add-ins platform.<\/span><\/i><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">The\u202fshared\u202fJavaScript runtime\u202fallows your Office Add-in JavaScript code to run in a single JavaScript runtime.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">Using a shared JavaScript runtime can simplify your code<\/span><span data-contrast=\"auto\">:<\/span><span data-contrast=\"auto\">\u00a0D<\/span><span data-contrast=\"auto\">ata and functionality\u00a0<\/span><span data-contrast=\"auto\">i<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0shared across all the code files in your project<\/span><span data-contrast=\"auto\">.\u00a0<\/span><span data-contrast=\"auto\">Your project can access the\u00a0<\/span><span data-contrast=\"auto\">task pane\u2019s DOM from any code file<\/span><span data-contrast=\"auto\">, including ribbon commands, and custom functions.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">Y<\/span><span data-contrast=\"auto\">ou<\/span><span data-contrast=\"auto\">r<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">code\u202f<\/span><span data-contrast=\"auto\">will continue\u00a0<\/span><span data-contrast=\"auto\">running even if the task pane is closed. And\u202fthere are many newer\u00a0<\/span><span data-contrast=\"auto\">UX<\/span><span data-contrast=\"auto\">\u00a0features, such as keyboard shortcuts, that are enabled when you use the shared runtime.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-6142\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/03\/Diagram-showing-ribbon-UI-custom-functions-and-task-pane-all-using-the-same-shared-JavaScript-runtime.png\" alt=\"shared runtime diagram\" width=\"529\" height=\"314\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/03\/Diagram-showing-ribbon-UI-custom-functions-and-task-pane-all-using-the-same-shared-JavaScript-runtime.png 529w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/03\/Diagram-showing-ribbon-UI-custom-functions-and-task-pane-all-using-the-same-shared-JavaScript-runtime-300x178.png 300w\" sizes=\"(max-width: 529px) 100vw, 529px\" \/><\/p>\n<h3><span data-contrast=\"none\">Configure your project\u00a0<\/span><span data-contrast=\"none\">to use<\/span><span data-contrast=\"none\">\u00a0the shared\u00a0<\/span><span data-contrast=\"none\">runtime<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">C<\/span><span data-contrast=\"auto\">onvert any existing project to use the shared\u202fruntime\u202fby applying a few changes to the manifest.xml file.\u202fWe recommend following the\u202fsteps\u202fin\u202f<\/span><span data-contrast=\"none\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/office\/dev\/add-ins\/develop\/configure-your-add-in-to-use-a-shared-runtime\">Configure your Office Add-in to use a shared JavaScript runtime.<\/a><\/span><\/p>\n<p><span data-contrast=\"auto\">After you configure your project, b<\/span><span data-contrast=\"auto\">e sure to specify the correct requirements for the shared\u00a0<\/span><span data-contrast=\"auto\">runtime<\/span><span data-contrast=\"auto\">. You want to specify the\u202f<\/span><b><span data-contrast=\"auto\">SharedRuntime<\/span><\/b><span data-contrast=\"auto\">\u202frequirement in your manifest as shown in the following XML.<\/span><span data-contrast=\"auto\">\u202f<\/span><\/p>\n<pre class=\"lang: decode:true \">&lt;Requirements&gt;\n\u202f\u202f&lt;Sets\u202fDefaultMinVersion=\"1.1\"&gt;\n\u202f\u202f\u202f\u202f&lt;Set Name=\"SharedRuntime\"\u202fMinVersion=\"1.1\"\/&gt;\n\u202f\u202f&lt;\/Sets&gt;\n&lt;\/Requirements&gt;<\/pre>\n<p><span data-contrast=\"auto\">If your add-in also implements custom functions for Excel, you need to specify both\u202f<\/span><b><span data-contrast=\"auto\">SharedRuntime<\/span><\/b><span data-contrast=\"auto\">\u202fand\u202f<\/span><b><span data-contrast=\"auto\">CustomFunctionsRuntime<\/span><\/b><span data-contrast=\"auto\">\u202fas shown in the following XML.<\/span><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<pre class=\"lang: decode:true \">&lt;Requirements&gt;\n\u202f\u202f&lt;Sets\u202fDefaultMinVersion=\"1.1\"&gt;\n\u202f\u202f\u202f\u202f&lt;Set Name=\"SharedRuntime\"\u202fMinVersion=\"1.1\"\/&gt;\n\u202f\u202f\u202f\u202f&lt;Set Name=\"CustomFunctionsRuntime\"\u202fMinVersion=\"1.1\"\/&gt;\n\u202f\u202f&lt;\/Sets&gt;\n&lt;\/Requirements&gt;<\/pre>\n<h3><span data-contrast=\"none\">Share data and\u00a0<\/span><span data-contrast=\"none\">functionality<\/span><span data-contrast=\"none\">\u00a0in\u202fyour\u202f<\/span><span data-contrast=\"none\">code<\/span><span data-contrast=\"none\">\u202f<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Once you<\/span><span data-contrast=\"auto\">r\u00a0<\/span><span data-contrast=\"auto\">Office Add-in project\u00a0<\/span><span data-contrast=\"auto\">is set up to\u00a0<\/span><span data-contrast=\"auto\">use the shared runtime,\u202f<\/span><span data-contrast=\"auto\">all\u00a0<\/span><span data-contrast=\"auto\">parts\u00a0<\/span><span data-contrast=\"auto\">of<\/span><span data-contrast=\"auto\">\u202fyour code\u202fwill run in the same JavaScript\u00a0<\/span><span data-contrast=\"auto\">runtime<\/span><span data-contrast=\"auto\">\u00a0and<\/span><span data-contrast=\"auto\">\u00a0can share\u202fdata.<\/span><span data-contrast=\"auto\">\u00a0JavaScript f<\/span><span data-contrast=\"auto\">unctions\u202fin one file can call functions in another file<\/span><span data-contrast=\"auto\">\u00a0\u2014<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">t<\/span><span data-contrast=\"auto\">here\u202fare\u202fno boundaries\u202fbetween your code files.\u202fFor example, functions in commands.js can call functions\u00a0<\/span><span data-contrast=\"auto\">in<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">taskpane<\/span><span data-contrast=\"auto\">.js.<\/span><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">The following code sample shows how to set up and store a global variable\u202fwhen the user presses a\u00a0<\/span><b><span data-contrast=\"auto\">Reset\u00a0<\/span><\/b><b><span data-contrast=\"auto\">i<\/span><\/b><b><span data-contrast=\"auto\">mage\u202f<\/span><\/b><b><span data-contrast=\"auto\">l<\/span><\/b><b><span data-contrast=\"auto\">ength<\/span><\/b><span data-contrast=\"auto\">\u00a0button.<\/span><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<pre class=\"lang: decode:true\">\/\/ commands.js file\u202f\u00a0\n\/\/ Import functions\u202ffrom taskpane.js.\u202f\nimport {taskPaneUpdateImageMetrics} from \"..\/taskpane\/taskpane.js\";\u202f \u202f\u00a0\n\n\/\/ Handle the button press event, set global variable, and call task\u00a0\u00a0\n\/\/ pane to update its UI.\u202f\u00a0\nfunction\u202fbtnResetImageLength(event)\n{\u202f\u00a0\n\u202f \/\/ getglobal() is a helper function\u202fyo\u202foffice builds into the project.\n  let g =\u202fgetGlobal();\n\u202f\u202f g.imageLength=100;\u202f\u00a0\n\u202f \u202ftaskPaneUpdateImageMetrics();\u202f\u00a0\n\u202f \u202fevent.completed();\u202f\u00a0\n}\u202f\u00a0\n...\u202f \n\n\/\/ taskpane.js file\u202f\u00a0\n\/\/ Import functions\u202ffrom commands.js.\u202f\nimport {getGlobal} from \"..\/commands\/commands.js\";\u202f\u00a0\n\n\/\/ Update element in the DOM by reading global variable value\u202f\u00a0\nexport function\u202ftaskPaneUpdateImageMetrics()\u00a0\u00a0\n{\u202f\u00a0\n  const g =\u202fgetGlobal();\n  document.getElementById(\"imageLength\").textContent=g.imageLength;\u202f\u00a0\n}<\/pre>\n<h3><span data-contrast=\"none\">Run code even when\u00a0<\/span><span data-contrast=\"none\">the\u00a0<\/span><span data-contrast=\"none\">task pane\u00a0<\/span><span data-contrast=\"none\">is\u00a0<\/span><span data-contrast=\"none\">closed<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">The shared runtime continues\u00a0<\/span><span data-contrast=\"auto\">to run\u00a0<\/span><span data-contrast=\"auto\">even if the task pane is closed. This means you can create global variables and not lose state when the user\u00a0<\/span><span data-contrast=\"auto\">close<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0the task pane window.<\/span><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<pre class=\"lang: decode:true \">\/\/ You can rely on this\u202fvariable to\u202fpersist\u202feven if\u202fthe\u202ftask pane is closed\u202f\u00a0\nvar\u202fuserName;\u202f\u00a0\nfunction\u202fsetUserName(name)\u00a0\u00a0\n{\u202f\u00a0\n  userName\u202f=\u202fname;\u202f\u00a0\n}<\/pre>\n<p><span data-contrast=\"auto\">Also,<\/span><span data-contrast=\"auto\">\u00a0t<\/span><span data-contrast=\"auto\">he shared runtime sends events w<\/span><span data-contrast=\"auto\">hen\u00a0<\/span><span data-contrast=\"auto\">the task pane is opened or closed<\/span><span data-contrast=\"auto\">.\u00a0<\/span><span data-contrast=\"auto\">H<\/span><span data-contrast=\"auto\">andle these events to\u00a0<\/span><span data-contrast=\"auto\">take\u00a0<\/span><span data-contrast=\"auto\">an action<\/span><span data-contrast=\"auto\">\u00a0when the user opens or closes the task pane. For example, you may want to\u00a0<\/span><span data-contrast=\"auto\">load or refresh data when the task pane is opened<\/span><span data-contrast=\"auto\">.<\/span><span data-contrast=\"auto\">\u00a0For more information,\u00a0<\/span><span data-contrast=\"auto\">see<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"none\">Show or hide the task pane of your Office Add-in<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<pre class=\"lang: decode:true \">Office.addin.onVisibilityModeChanged(function(args)\n{\u00a0\n    if\u00a0(args.visibilityMode\u00a0= \"Taskpane\");\n    {\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Code that runs whenever the task pane is made visible.\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ For example, an\u00a0Excel.run() that loads the names of\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ all worksheets and\u00a0passes\u00a0them to the task pane UI.\u00a0\n\u00a0\u00a0\u00a0 }\u00a0\n}\n);<\/pre>\n<h3><span data-contrast=\"none\">Access the task pa<\/span><span data-contrast=\"none\">ne DOM from\u202f<\/span><span data-contrast=\"none\">anywhere<\/span><span data-contrast=\"none\">\u202f<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Using shared runtime all<\/span><span data-contrast=\"auto\">ows you\u00a0<\/span><span data-contrast=\"auto\">to<\/span><span data-contrast=\"auto\">\u00a0access the DOM of your task pane from any code file.\u202fFor example,\u00a0<\/span><span data-contrast=\"auto\">say\u00a0<\/span><span data-contrast=\"auto\">your add-in\u00a0<\/span><span data-contrast=\"auto\">has<\/span><span data-contrast=\"auto\">\u00a0a button to set the\u00a0add-in to use metric units. The code needs to update the task pane UI to reflect the state change.\u202fThe following example shows how\u00a0<\/span><span data-contrast=\"auto\">to<\/span><span data-contrast=\"auto\">\u00a0handle a\u00a0<\/span><span data-contrast=\"auto\">button<\/span><span data-contrast=\"auto\">\u00a0press event\u202fin commands.js and update a checkbox on the task pane.\u202f<\/span><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<pre class=\"lang: decode:true \">function\u202fbtnSetMetric(event)\u00a0\n{\u202f\u00a0\n\u202f\u202fdocument.getElementById('metric').checked=\"true\";\u202f\u00a0\n\u202f\u202fevent.completed();\u202f\u00a0\n}<\/pre>\n<h3><span data-contrast=\"none\">Handle events\u00a0<\/span><span data-contrast=\"none\">anywhere<\/span><span data-contrast=\"none\">\u202f<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Code\u202fto handle events\u202f<\/span><span data-contrast=\"auto\">doesn\u2019t<\/span><span data-contrast=\"auto\">\u202f<\/span><span data-contrast=\"auto\">need<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">to be in a specific file.\u00a0<\/span><span data-contrast=\"auto\">F<\/span><span data-contrast=\"auto\">or example,\u00a0<\/span><span data-contrast=\"auto\">you can\u00a0<\/span><span data-contrast=\"auto\">handle\u00a0<\/span><span data-contrast=\"auto\">command<\/span><span data-contrast=\"auto\">\u00a0events from the ribbon in the\u00a0<\/span><span data-contrast=\"auto\">taskpane<\/span><span data-contrast=\"auto\">.<\/span><span data-contrast=\"auto\">js<\/span><span data-contrast=\"auto\">\u00a0file.\u202f<\/span><span data-contrast=\"auto\">Or<\/span><span data-contrast=\"auto\">\u00a0move custom functions from\u202ffunctions.<\/span><span data-contrast=\"auto\">js<\/span><span data-contrast=\"auto\">\u00a0to a different file.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">N<\/span><span data-contrast=\"auto\">ote that if you move custom functions<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0you need to be sure the custom functions metadata generator points to the correct file location\u00a0<\/span><span data-contrast=\"auto\">in<\/span><span data-contrast=\"auto\">\u00a0webpack.config.js. For more information,\u00a0<\/span><span data-contrast=\"auto\">see<\/span><span data-contrast=\"auto\">\u202fthe <a href=\"https:\/\/github.com\/OfficeDev\/Office-Addin-Scripts\/blob\/master\/packages\/custom-functions-metadata\/README.md\">README.md in\u00a0OfficeDev\/Office-Addin-Scripts (github.com)<\/a><\/span><span data-contrast=\"auto\">.<\/span><\/p>\n<h3><span data-contrast=\"auto\">\u202f<\/span><span data-contrast=\"none\">Features\u00a0<\/span><span data-contrast=\"none\">enabled<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">in<\/span><span data-contrast=\"none\">\u00a0shared\u202f<\/span><span data-contrast=\"none\">runtime<\/span><span data-contrast=\"none\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">There are many features that are enabled when you use the shared\u202fruntime.\u202fSee the following documents for more information about any feature you are interested in, or\u00a0<\/span><span data-contrast=\"auto\">require<\/span><span data-contrast=\"auto\">d<\/span><span data-contrast=\"auto\">\u00a0in your Office Add-in.<\/span><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/office\/dev\/add-ins\/design\/disable-add-in-commands\"><span data-contrast=\"none\">Enable and Disable Add-in Commands<\/span><\/a><span data-contrast=\"auto\">\u202f<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/office\/dev\/add-ins\/design\/contextual-tabs\"><span data-contrast=\"none\">Create custom contextual tabs in Office Add-ins<\/span><\/a><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:1080,&quot;335559731&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/office\/dev\/add-ins\/design\/custom-tab-placement\"><span data-contrast=\"none\">Position a custom tab on the ribbon<\/span><\/a><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:1080,&quot;335559731&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/office\/dev\/add-ins\/design\/keyboard-shortcuts\"><span data-contrast=\"none\">Custom keyboard shortcuts in Office Add-ins<\/span><\/a><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:1080,&quot;335559731&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/office\/dev\/add-ins\/develop\/show-hide-add-in\"><span data-contrast=\"none\">Show or hide the task pane of your Office Add-in<\/span><\/a><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:1080,&quot;335559731&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/office\/dev\/add-ins\/develop\/run-code-on-document-open\"><span data-contrast=\"none\">Run code in your Office Add-in when the document opens<\/span><\/a><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:1080,&quot;335559731&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/office\/dev\/add-ins\/develop\/automatically-open-a-task-pane-with-a-document\"><span data-contrast=\"none\">Automatically open a task pane with a document<\/span><\/a><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:1080,&quot;335559731&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/office\/dev\/add-ins\/excel\/call-excel-apis-from-custom-function\"><span data-contrast=\"none\">Call Excel JavaScript APIs from a custom function<\/span><\/a><span data-contrast=\"auto\">\u202f<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559685&quot;:1080,&quot;335559731&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n<h3><span data-contrast=\"none\">More\u00a0<\/span><span data-contrast=\"none\">resources<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Many Office Add-ins, including\u00a0<\/span><span data-contrast=\"auto\">yours<\/span><span data-contrast=\"auto\">,\u00a0<\/span><span data-contrast=\"auto\">could\u00a0<\/span><span data-contrast=\"auto\">benefit<\/span><span data-contrast=\"auto\">\u00a0from using the shared runtime. Whether\u00a0<\/span><span data-contrast=\"auto\">you\u2019re<\/span><span data-contrast=\"auto\">\u00a0creating a new Office Add-in or updating an existing one,\u00a0<\/span><span data-contrast=\"auto\">get started by\u00a0<\/span><span data-contrast=\"auto\">reading<\/span><span data-contrast=\"auto\">\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/office\/dev\/add-ins\/develop\/configure-your-add-in-to-use-a-shared-runtime\"><span data-contrast=\"none\">Configure your Office Add-in to us a shared JavaScript runtime<\/span><\/a><span data-contrast=\"auto\">. We also have\u00a0<\/span><span data-contrast=\"auto\">several<\/span><span data-contrast=\"auto\">\u00a0<\/span><a href=\"https:\/\/github.com\/OfficeDev\/PnP-OfficeAddins\/blob\/master\/README.md\"><span data-contrast=\"none\">PnP<\/span><span data-contrast=\"none\">\u00a0s<\/span><span data-contrast=\"none\">hared runtime samples available<\/span><\/a><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">if<\/span><span data-contrast=\"auto\">\u00a0you want to explore more.<\/span><span data-contrast=\"auto\">\u00a0With PowerPoint\u00a0<\/span><span data-contrast=\"auto\">shared runtime\u00a0<\/span><span data-contrast=\"auto\">support on Windows now in\u00a0<\/span><span data-contrast=\"auto\">Public Preview<\/span><span data-contrast=\"auto\">,\u00a0<\/span><span data-contrast=\"auto\">there\u2019s<\/span><span data-contrast=\"auto\">\u00a0even more coming soon.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\"> Keep an eye out for new blog posts here as new information becomes available.<\/span><\/p>\n<p>David Chesnut<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-6141\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/03\/David-Chesnut-Senior-Dev-Writer-Microsoft-headshot-100px.png\" alt=\"Headshot of David Chesnut, Microsoft\" width=\"100\" height=\"102\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/03\/David-Chesnut-Senior-Dev-Writer-Microsoft-headshot-100px.png 100w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/03\/David-Chesnut-Senior-Dev-Writer-Microsoft-headshot-100px-24x24.png 24w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/03\/David-Chesnut-Senior-Dev-Writer-Microsoft-headshot-100px-48x48.png 48w\" sizes=\"(max-width: 100px) 100vw, 100px\" \/><\/p>\n<p>David Chesnut is a Senior Dev Writer on the Microsoft 365 Developer Platform Team<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tips for using the shared JavaScript runtime in your Office Add-in to simplify your code. Share data and functionality, access the task pane DOM from anywhere, keep running even when the task pane is closed, and more.<\/p>\n","protected":false},"author":69076,"featured_media":25159,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[11],"tags":[],"class_list":["post-6140","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-office-add-ins"],"acf":[],"blog_post_summary":"<p>Tips for using the shared JavaScript runtime in your Office Add-in to simplify your code. Share data and functionality, access the task pane DOM from anywhere, keep running even when the task pane is closed, and more.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/6140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/users\/69076"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/comments?post=6140"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/6140\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media\/25159"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media?parent=6140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/categories?post=6140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/tags?post=6140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}