问题描述
我想加载几个具有不同搜索词的亚马逊小部件并突出显示一些结果。
问题是,我怎么知道何时加载了两个小部件? 我尝试了许多不同的片段(带负载、准备就绪等...)我在这里和那里都找到了,但都没有成功。
基本上,当加载时,每个小部件的内容都位于一个“广告单元”DIV(..._adunit_0 和..._adunit_1)中,该 DIV 包含另一个 DIV,在该 DIV 内有一个 IFRAME。两个 DIV 都有 ID,但没有 IFRAME,以防万一。
<div id="amzn_assoc_ad_div_adunit_0">
<div id="__mobileAssociatesSearchWidget_adunit_0" class="__mobile-associates-search-widget">
<iframe>search results</iframe>
</div>
</div>
这是加载 2 个小部件的代码:https://jsfiddle.net/rz8ytfxd/
<html>
<body>
<script type='text/javascript'>
amzn_assoc_ad_type = 'responsive_search_widget';
amzn_assoc_tracking_id = '';
amzn_assoc_marketplace = 'amazon';
amzn_assoc_region = 'DE';
amzn_assoc_placement = '';
amzn_assoc_search_type = 'search_widget';
amzn_assoc_width = 'auto';
amzn_assoc_height = 'auto';
amzn_assoc_default_search_category = '';
amzn_assoc_default_search_key = 'lonely planet ukraine'
amzn_assoc_theme = 'light';
amzn_assoc_bg_color = 'FFFFFF';
</script>
<script src='//z-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&Operation=GetScript&ID=OneJS&WS=1&Marketplace=DE'></script>
<script type='text/javascript'>
amzn_assoc_ad_type = 'responsive_search_widget';
amzn_assoc_tracking_id = '';
amzn_assoc_marketplace = 'amazon';
amzn_assoc_region = 'DE';
amzn_assoc_placement = '';
amzn_assoc_search_type = 'search_widget';
amzn_assoc_width = 'auto';
amzn_assoc_height = 'auto';
amzn_assoc_default_search_category = '';
amzn_assoc_default_search_key = 'lonely planet poland'
amzn_assoc_theme = 'light';
amzn_assoc_bg_color = 'FFFFFF';
</script>
<script src='//z-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&Operation=GetScript&ID=OneJS&WS=1&Marketplace=DE'></script>
</body>
</html>
任何帮助将不胜感激。我不介意解决方案是否需要 jQuery 或任何其他库。
迈克尔
[我可能会为此发布另一个问题,但以防万一......你知道为什么搜索词中的空格被替换为 %20(从而给出不好的结果),尽管它是代码完全是从亚马逊复制的?可以做些什么吗?]
解决方法
最简单的解决方案是定期检查已加载项目的数量。如果您希望加载 n 个 iframe,那么您可以这样做:
function waitForNIFrames(callback,n) {
let myInterval = setInterval(function() {
if (document.querySelectorAll("iframe") >= n) {
clearInterval(myInterval);
callback(); //This is the function you want to execute when it's done.
}
},100);
}
也许亚马逊有一些不错的回调功能。我建议阅读有关这种可能性的文档。
您还可以跟踪 DOM 更改,但这是一种更复杂的方法。
关于 %20:让我们看看您网址的 src
属性:
你会看到你并不真正需要的东西已经在 iframe
中,并将 src
替换为
https://ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&MarketPlace=DE&Operation=GetWidgetFrame&OneJS=1&ad_type=responsive_search_widget®ion=DE&marketplace=amazon&tracking_id=&auto_complete=true&org_reco_count=0&axf_treatment=&search_type=search_widget&linkid=&width=685&height=252&default_search_category=&default_search_key=lonely 行星 ukraine&widgetId=__mobileAssociatesSearchWidget_adunit_0&default_category_html=&default_category_value=&default_category_search=&isresponsive=true&theme=light&bg_color=FFFFFF&slotNum=0&debug=&viewerCountry=RO
在开发工具中将修复特定页面加载的问题。我不知道是什么导致了这种情况,但是,您并不是唯一遇到此问题的人:Amazon Search Widget fails for spaces in search term