好的,难倒了。我只是使用代码向客户展示可能性(我是自雇人士)。 试图从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;注册表键/值指向它们应该的位置(从工作版本克隆)。
答案 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, 吉姆