2016-02-04 24 views
1

我正在为Word编写加载项。我有Word 2016.在这种情况下,Office.context.requirements.isSetSupported('WordApi', 1.1)应该返回true,但它返回false。并且Word对象未定义。有任何想法吗?谢谢。在Windows 7单词对象在Word2016中未定义

的Microsoft Word 2016 MSO(16.0.6326.1022)32位企业

下面是我的一些代码片段:

在我htmlhead我有这样的:

<script src="https://appsforoffice.microsoft.com/lib/1/hosted/Office.js" type="text/javascript"></script> 
<script src="local/js/common.js"></script> 

common.js以

开头
Office.initialize = function(reason) { 
    console.log(Office.context.requirememts) 
    if (Office.context.requirements.isSetSupported('WordApi', 1.1)) { 
     //never gets in here 
    } 
    else { 
     console.log("This add-in requires Word 2016 or greater."); 
    } 
}; 

Office.context.requirememts没有isSetSupported功能

UPDATE: 有一两件事,我不认为是相关的,但显然它。我的负载HTML页面重定向到另一个HTML页面,似乎导致了这个问题。我之所以有重定向是因为当XML文件

<SourceLocation DefaultValue="http://localhost/wordaddin/index.html"/>

,而不是

<SourceLocation DefaultValue="C:\WordAddIn\index.html"/>

html文件的内容缓存,并没有办法(没有我发现在至少)清除此缓存。因此,无论我在index.html中做什么更改都不会完成。因此,在index.html的负载上,我做了window.location='main.html?'+datestamp,并且做了这个诀窍,但后来我陷入了这个怪事。

下面是index.html的:

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <meta charset="UTF-8" /> 
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> 
    <script> 
     function init() { 
      var timestamp = new Date().valueOf(); 
      window.location = "main.html?" + timestamp; 
     } 
    </script> 
</head> 
<body onload="init()"> 

</body> 
</html> 
+0

你能分享Word版本+内部版本号吗? 你能确认这是Word 2016 for Windows吗? 请发布您的代码。您尝试过的任何参考资料或来源都会有所帮助。 –

回答

0

只为我工作(我必须说,这是一个可怕的解决方案)的事情是一个查询字符串参数添加到HTML文件的地址在我的XML

<SourceLocation DefaultValue="http://localhost/wordaddin/index.html?1"/>

然后我需要在每次的index.html改变时更改此参数和重新连接外接。

如果有更好的解决方案,请分享。

0

你有在页面上Office.initialize?一旦办公室有机会初始化...

所有样品,你看应该包括

Office.initialize = function (reason) { 
    ... 
}; 

线你提到这些API才可用。

〜迈克尔Zlatkovsky,在Office扩展的团队开发,MSFT

+0

是的,我确实有Office.initialize。我已经在我的问题中添加了更多描述 – chibis

+0

在这种情况下,如果您有Word 2016 for Windows,那应该可行......是否有任何其他细节可以考虑? –

+0

感谢您的意见。我发现一些更多的细节分享和更新我的问题 – chibis

0

这里有很多信息缺失,所以我会尽量清除我所有的假设。 有一点可以肯定的是,你不需要改变清单(它在这个问题上称为“xml文件”)以启用你的场景。

也。

a。我看到你赢了7 b。您正在使用正确配置为受信任位置的基于文件共享的目录。 c。您在该位置删除了清单(xml)。 d。清单的源位置指向正确的html位置。

如果以上所有假设都是正确的,则不应该有任何问题。 我将html和js文件放在同一个文件夹中。

这是HTML文件

<!DOCTYPE html> 
    <html> 
    <head> 

    <script src="https://appsforoffice.microsoft.com/lib/1/hosted/Office.js" type="text/javascript"></script> 
    <script src="common.js"></script> 

<title></title> 
<meta charset="UTF-8" /> 
<meta http-equiv="X-UA-Compatible" content="IE=Edge" /> 
<script> 
    function init() { 
     var timestamp = new Date().valueOf(); 
    // window.location = "main.html?" + timestamp; 
    } 
</script> 
</head> 
<body onload="init()"> 
     Hello World! 
<div id='result'></div> 
</body> 
</html> 

注意,我评论了window.location的东西,因为这是没有必要的内容。 我添加了一个div来显示需求验证的结果。

这是JS的内容文件

Office.initialize = function(reason) { 
console.log(Office.context.requirememts) 
if (Office.context.requirements.isSetSupported('WordApi', 1.1)) { 
    //never gets in here 
document.getElementById("result").innerText= "Requirement supported."; 
    } 
    else { 
    document.getElementById("result").innerText= "This add-in requires Word 2016 or greater."; 
    } 
    }; 

最后这里是明显的:

<?xml version="1.0" encoding="UTF-8"?> 
<!--Created:cb85b80c-f585-40ff-8bfc-12ff4d0e34a9--> 
<OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TaskPaneApp"> 
<Id>90400971-e367-4e1b-b9bf-fc2163635c37</Id> 
<Version>1.0.0.0</Version> 
<ProviderName>Juanelo Balmori</ProviderName> 
<DefaultLocale>en-US</DefaultLocale> 
<DisplayName DefaultValue="Code FLow Word.js" /> 
<Description DefaultValue="Code Flow Sample!"/> 

<Capabilities> 
    <Capability Name="Document" /> 
</Capabilities> 
<DefaultSettings> 
<SourceLocation DefaultValue="\\*name of your share*\index.html" /> 
</DefaultSettings> 
<Permissions>ReadWriteDocument</Permissions> 
</OfficeApp> 

请注意,您需要创建一个文件共享基于目录可信的位置共享。

如果所有这一切都到位,我正在获得预期的功能。如果我更改HTML文件时,我按F5 taskpane此得到反映的内容..

注意,您必须很可能感到栏,使运行的本地HTML页面,只要确保允许在taskpane,你应该没事的!。

谢谢!

+0

谢谢你的答案。对于一个我不能让共享驱动器工作。我不断收到一个关于加载项加载的错误'“找不到...://myshare/wordaddin/main.html?_host_Info = ...确保路径或Internet地址是正确的。”在加载项中使用cookie,我的猜测是一旦我指向一个共享,cookie将不起作用,这就是为什么我设置了一个虚拟目录并使用'http:// localhost/wordaddin/main.html'清单中的'\\ myshare \ wordaddin \ main.html'。有什么建议么? – chibis

+0

虚拟目录必须完全工作。验证您的地址是否正确复制并粘贴您的共享或网址到浏览器中,如果它打开您的页面,这应该完全可行。 –

+0

它确实有效,但主要的变化。除非我更改清单的SourceLocation指向'main.html?<不同的东西>'然后关闭加载项(只是刷新不会执行),否则html不会反映到加载项中,请转到所有加载项,刷新该列表并加载我的加载项。如果你在html中做了很多修改,这是非常烦人的 – chibis

0

我有同样的问题。使用协议https可能会有帮助。

第一次加载时,http或https工作正常。如果您从其他网站回电,则必须使用https。