Javascript:属性的值为null或undefined,而不是Function对象

时间:2017-03-01 19:01:34

标签: javascript

好的,难倒了。我只是使用代码向客户展示可能性(我是自雇人士)。 试图从IE11-Browser中显示get-selected-text-from。现在还不需要跨浏览器和专家(如果客户继续) 尝试编写一个javascript函数来从浏览器中获取所选文本。这在直接调用时工作正常(通过F12工具将功能放入Console)并返回选择。但是当从Context Menu HTM脚本调用时,它会因上述错误而失败。获取所选文本的代码来自另一个上下文菜单脚本,当所有代码都在一个HTM脚本(cmGoogleMapSelection_1.htm)中时,该脚本可以正常工作。我只是想通过重用来提高效率,并自己学习更多。如果我无法解决问题,我将返回内联代码(在您精彩的自我帮助下)。

继续在HTM脚本中报告以下错误:

属性'myGetSelectedText'的值为null或未定义,而不是Function对象。

已阅读了一些帖子,并试图确保我已经涵盖了他们的建议。仍然难过,任何帮助表示赞赏 代码,首先是'函数',然后是'脚本';脚本文件和函数文件都在同一个本地文件夹中(请原谅Debug代码 - gulp):

fn_myGetSelectedText.js:

function myGetSelectedText(pDefault) {
var zDbug = 1; 
var zDbugMsg = "Debug: ";
var zSelection = "";

if (zDbug) {alert(zDbugMsg + "Starting Function 'myGetSelectedText' from fn_myGetSelectedText.js");}

zSelection = "" + window.getSelection().toString();

if (zDbug) {alert(zDbugMsg + " Selection= '" + zSelection + "'");}

if (zSelection == "") {
  zSelection = pDefault;
  alert(zDbugMsg + "Null selection, using: " + zDefault + " !");
  }

return zSelection;
}//EndOf: Function -----

cmGoogleMapSelection_2.htm:

<!-- saved from url=(0016)http://localhost -->

<script type="text/javascript" src="fn_myGetSelectedText.js"></script> 
<script type="text/javascript">
//- zDbug: 0 = false = no messages; 1 = true = show messages -----
var zDbug = 1;
var zDbugMsg = "Debug: ";

if (zDbug) {alert(zDbugMsg + "Starting cmGoogleMap_Selection2.htm V14");}

//- Google Maps stem URL & default location -----
var zMaps = "http://maps.google.co.uk/maps?hl=en&q=";
var zDefault = "+London";

var zSelection = myGetSelectedText(zDefault);    //- Error occurs here <<<<<<<<<<<

if (zDbug) {alert(zDbugMsg + " Selection= '" + zSelection + "'");}

//- Build Maps URL -----
var zGo = zMaps + zSelection;

//- Open new Maps window -----
if (zDbug) {alert(zDbugMsg + "Issuing Window.Open on URL: " + zGo);}
window.open(zGo, "_blank");

//- Close this window -----
window.close()
</script>

<!-- Just to put something into the main code window so I know which one it is -->
<style>
p {font-family: "Lucida Console"; color: Red; font-size: 16pt;}
</style>
<p> >>--  Map Selected Text Function  --<< <br> 
    >>--  . . 'myGetSelectedText' . . --<< </p>

我希望能说我没有错过任何地方的支架 - 令人尴尬! 其他东西:Windows 10 Pro(完全更新); 64位IE11;只是javascript;兼容性视图OFF;注册表键/值指向它们应该的位置(从工作版本克隆)。

2 个答案:

答案 0 :(得分:0)

当浏览器从互联网上下载fn_myGetSelectedText.js文件时,它不会停止解析HTML中的其他代码。当浏览器解析DOM时,会同时下载资产。 当浏览器到达此行var zSelection = myGetSelectedText();时,它在那时没有看到窗口对象上定义的myGetSelectedText因此抛出错误。 您要做的是将HTML中的脚本/代码包装到DOMContentLoaded事件中,并在页面加载完成后调用它。

<script>
  document.addEventListener("DOMContentLoaded", function(event) {
    console.log("DOM fully loaded and parsed");
  });
</script>

参考:https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded

答案 1 :(得分:-1)

我的猜测是,在你的被调用函数中,pDefault是未定义的,因为你在进行调用时没有传递变量。

所以,这一行:var zSelection = myGetSelectedText();
应该成为:var zSelection = myGetSelectedText(zDefault);

HTH, 吉姆